mysql判断索引执行情况explain关键字详解

126 阅读2分钟

mysql判断索引执行情况explain关键字详解

MySQL EXPLAIN 关键字详解
EXPLAINMySQL 中用于分析 SQL 查询执行计划的关键工具,
它能帮助开发者理解查询的执行方式并优化性能。以下是 EXPLAIN 输出结果的详细解释:

核心字段解析
‌id‌
查询的标识符,相同 id 表示同一查询块
数字越大执行优先级越高

‌select_type‌
SIMPLE:简单查询(不含子查询或 UNIONPRIMARY:主查询(最外层查询)
SUBQUERY:子查询
DERIVED:派生表(FROM 子句中的子查询)
UNIONUNION 中的第二个或后续查询

‌table‌
当前行访问的表名或别名

‌partitions‌
查询涉及的分区(未分区表显示 NULL)

‌type‌(重要性能指标)
system > const > eq_ref > ref > range > index > ALL(性能从优到劣)
const:通过主键或唯一索引查询单条记录
ref:非唯一索引查找
range:索引范围扫描
index:全索引扫描
ALL:全表扫描(需优化)

‌possible_keys‌
可能使用的索引列表

‌key‌
实际使用的索引

‌key_len‌
使用的索引长度(字节数)

‌ref‌
显示索引的哪一列被使用

‌rows‌
预估需要检查的行数(重要优化指标)

‌filtered‌
存储引擎返回数据后在 server 层过滤的比例(百分比)

‌Extra‌(重要补充信息)
Using index:覆盖索引(避免回表)
Using where:WHERE 条件过滤
Using temporary:使用临时表
Using filesort:额外排序操作
Using join buffer:使用连接缓冲

使用示例
EXPLAIN SELECT * FROM users WHERE id = 1;

典型优化建议:

避免出现 type=ALL(全表扫描)
关注 rows 值过大的查询
优先考虑 Extra 中出现 "Using index" 的查询
注意 Using filesort 和 Using temporary 可能导致的性能问题
通过分析 EXPLAIN 结果,可以识别查询瓶颈并针对性优化索引或 SQL 结构