SQL优化之避免全表扫描

简介: 在mysql5.6官方文档中关于full table scan的介绍如下:An operation that requires reading the entire contents of a table, rather than just selected portions using an index.

在mysql5.6官方文档中关于full table scan的介绍如下:

An operation that requires reading the entire contents of a table, rather than just selected portions using an index. Typically performed either with small lookup tables, or in data warehousing situations with large tables where all available data is aggregated and analyzed. How frequently these operations occur, and the sizes of the tables relative to available memory, have implications for the algorithms used in query optimization and managing the buffer pool.
The purpose of indexes is to allow lookups for specific values or ranges of values within a large table, thus avoiding full table scans when practical.

大意:
Full table scan是一种需要读取表全部数据的操作,常见于读取小表的全部内容,或者在数仓中查询大表所有数据用以分析或聚合。
索引的目的是允许在一个大表中查找特定的值或值的范围,从而在实际操作时避免全表扫描。

一、发生全表扫描的条件

在表数据非常大时,全表扫描往往是灾难性的。当explain输出的type列的值为ALL时,表示这一步发生了全表扫描操作。一般出现以下条件时会发生全表扫描:
1、表数据量很小,走索引查询比全表扫描更麻烦;这对于少于10行且行长度较短的表来说很常见;
2、SQL的on子句或者where子句涉及到的列上没有索引;
3、将索引列与常量值进行比较,并且MySQL已经计算(基于索引树)常量覆盖了表中太大的一部分,而表扫描会更快。换言之,即便字段选择性高且有索引,但要取出的数据行太多,也不会走索引,这个比例一般是20%-30%;
4、对于低选择性的索引列,一个键值可能会匹配N多行数据,这个时候也不走索引而发生全表扫描。

二、优化全表扫描

对于小数据量的表,表扫描通常是合适的。对于大数据量的表,可以尝试以下技术来避免优化器发生全表扫描:
1、通过“ANALYZE TABLE tb_name”语句更新表上的索引统计信息;对于innodb表和myisam表来说,执行该语句时会加表级S锁;
2、使用 “FORCE INDEX”语句强制走索引,告诉优化器走该索引更合适;
3、修改max_seeks_for_key参数值,例如:SET max_seeks_for_key=1000。该参数的含义:根据键查找行时,限制假定的最大查找次数;通过调低该参数值,以使优化器更喜欢索引而不是表扫描。

目录
相关文章
|
1月前
|
SQL 存储 关系型数据库
如何巧用索引优化SQL语句性能?
本文从索引角度探讨了如何优化MySQL中的SQL语句性能。首先介绍了如何通过查看执行时间和执行计划定位慢SQL,并详细解析了EXPLAIN命令的各个字段含义。接着讲解了索引优化的关键点,包括聚簇索引、索引覆盖、联合索引及最左前缀原则等。最后,通过具体示例展示了索引如何提升查询速度,并提供了三层B+树的存储容量计算方法。通过这些技巧,可以帮助开发者有效提升数据库查询效率。
98 2
|
4天前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
13天前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
53 10
|
11天前
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
|
25天前
|
SQL 资源调度 分布式计算
如何让SQL跑快一点?(优化指南)
这篇文章主要探讨了如何在阿里云MaxCompute(原ODPS)平台上对SQL任务进行优化,特别是针对大数据处理和分析场景下的性能优化。
|
1月前
|
SQL 监控 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响
|
1月前
|
SQL 关系型数据库 PostgreSQL
遇到SQL 子查询性能很差?其实可以这样优化
遇到SQL 子查询性能很差?其实可以这样优化
87 2
|
1月前
|
SQL 存储 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响
|
1月前
|
SQL 数据处理 数据库
SQL语句优化与查询结果优化:提升数据库性能的实战技巧
在数据库管理和应用中,SQL语句的编写和查询结果的优化是提升数据库性能的关键环节
|
1月前
|
SQL 存储 数据库
慢SQL对数据库写入性能的影响及优化策略
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生不利影响