简介:
explain是一个强大的 SQL 命令,用于分析和优化查询性能。通过查看数据库执行计划,我们可以理解查询是如何被处理的,包括表的访问顺序、使用的索引、连接类型等。这对于找到潜在的性能瓶颈非常重要。
目录
一、基本含义
二、解析执行计划
一、基本含义
当我们在SQL查询前加上explain关键字时,它会给我们返回一张表,其中包含查询的执行计划信息,分别解释一下列值的含义:
1、id:查询的标识符,代表查询的顺序(1、2说明1先执行,2后执行)
2、select_type:查询的类型。如①SIMPLE 简单查询 ②PRIMARY主查询 ③SUBQUERY子查询
3、table:查询中涉及到的表名
4、type:连接类型,表示MySQL如何查找表中的行,常见类型有:
①ALL:全表扫描,可能导致性能变差
②INDEX:索引扫描,表ALL快,但仍会扫描所有索引。
③range:范围扫描,仅扫描匹配的行。
④ref:通过非唯一索引或者唯一索引查找所匹配的行。
⑤eq_ref:通过主键或唯一索引查找所匹配的行,效率较高。
⑥const:通过主键查找的常量值,效率最优。
5、possible_keys:查询可能使用的索引。
6、key:实际使用的索引。
7、key_len:使用的索引长度。有助于判断是否使用了合适的索引。
8、ref:显示哪些列或常量与key值匹配。
9、rows:估算需要读取的行数,以获取最终结果。
10、Extra:其他信息。例如使用临时表或文件排序等。
二、解析执行计划
1、检查连接类型:
1.1:优先使用ref、eq_ref、const类型,这都是些高效率的连接方式。
1.2:避免使用ALL,这会扫描全表索引,显著降低sql性能。
2、查看使用的索引:
2.1:检查 possible_keys 列,查看是否有合适的索引可用。
2.2:确保 possible_keys 列显示了有效的索引,并且key_len足够的短,尽可能提高效率
3、评估rows:
在rows列中查看预估读取的行数,较小的数字意味着更好的性能。
4、注意其他信息:
在 Extra 列中,特别是Using temporary 或 Using filesort 。这通常表明查询的性能受到了影响,需要我们去排查。
三、实际的应用
1、优化查询
2、性能监控:定期使用explain 监控 复杂查询,确保它们没有随着表中数据量的增加而降低效率
3、调试问题:性能不如预期时,通过explain查看。
示例:
a表name加上普通索引
b表age字段加上普通索引
通过explain执行计划查看详细信息:
由此看出,表a通过索引快速定位数据,没有进行全表扫描(ALL)
表b使用了等值连接(eq_ref),有效利用了主键索引。此时我们的索引使用情况是正常的。