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。该参数的含义:根据键查找行时,限制假定的最大查找次数;通过调低该参数值,以使优化器更喜欢索引而不是表扫描。

目录
相关文章
|
2月前
|
SQL 存储 关系型数据库
如何巧用索引优化SQL语句性能?
本文从索引角度探讨了如何优化MySQL中的SQL语句性能。首先介绍了如何通过查看执行时间和执行计划定位慢SQL,并详细解析了EXPLAIN命令的各个字段含义。接着讲解了索引优化的关键点,包括聚簇索引、索引覆盖、联合索引及最左前缀原则等。最后,通过具体示例展示了索引如何提升查询速度,并提供了三层B+树的存储容量计算方法。通过这些技巧,可以帮助开发者有效提升数据库查询效率。
184 2
|
1天前
|
SQL Oracle 数据库
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
19 11
|
1月前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
21天前
|
SQL 缓存 数据库
SQL慢查询优化策略
在数据库管理和应用开发中,SQL查询的性能优化至关重要。慢查询优化不仅可以提高应用的响应速度,还能降低服务器负载,提升用户体验。本文将详细介绍针对SQL慢查询的优化策略。
|
21天前
|
SQL 存储 BI
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
|
21天前
|
SQL 数据库
gbase 8a 数据库 SQL优化案例-关联顺序优化
gbase 8a 数据库 SQL优化案例-关联顺序优化
|
28天前
|
SQL 数据库 UED
SQL性能提升秘籍:5步优化法与10个实战案例
在数据库管理和应用开发中,SQL查询的性能优化至关重要。高效的SQL查询不仅可以提高应用的响应速度,还能降低服务器负载,提升用户体验。本文将分享SQL优化的五大步骤和十个实战案例,帮助构建高效、稳定的数据库应用。
46 3
|
1月前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
120 10
|
1月前
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
|
28天前
|
SQL 缓存 监控
SQL性能提升指南:五大优化策略与十个实战案例
在数据库性能优化的世界里,SQL优化是提升查询效率的关键。一个高效的SQL查询可以显著减少数据库的负载,提高应用响应速度,甚至影响整个系统的稳定性和扩展性。本文将介绍SQL优化的五大步骤,并结合十个实战案例,为你提供一份详尽的性能提升指南。
48 0