EXPLAIN
:使用EXPLAIN| DESCRIBE查看语句具体执行计划,并不真正执行语句(在估计大致数据量时可以使用explain)
- type:针对单表的访问方法
- system:当表中只有一条记录,并且该表使用的存储引擎统计数据是准确的如MyISAM、Memory
- const:根据主键或唯一二级索引与常数进行等值匹配
- eq_ref:连接查询时,被驱动表通过主键或唯一二级索引进行等值查询
- ref:根据普通二级索引进行等值查询。ref_or_null
- index_merge:索引合并方式进行查询
- unique_subquery:优化器把IN子查询转换为EXISTS子查询,且子查询可以用到等值匹配
- range:使用索引获取区间范围的记录
- index:可以使用覆盖索引,但需要扫描全部索引记录
- ALL:全表扫描
- possible_keys:可能使用到的索引。key:实际使用到的索引
- key_len:实际利用的索引长度,值越大越好,检查是否充分利用到了索引,对于联合索引有一定参考意义
- Extra:额外信息,更准确地理解mysql到底将如何执行给定的查询语句
- No tables used:没有from子句
- Impossible WHERE:where子句永远为FALSE
- Using where:全表扫描,使用索引但where包含其他列
- NULL:使用索引
- No matching min/max row:使用了聚合函数,但没有符合where子句中搜索条件的记录
- select tables optimized away:使用了聚合函数,有符合where子句中搜索条件的记录
- using index:使用覆盖索引不需要回表
- using index condfition:索引下推
- using join buffer:连接查询。被驱动表不能有效利用索引,mysql会为其分配join buffer内存快加快查询
- Not exist:where包含某不允许为null的列值为null
- using union:索引合并
- Zero limit:limit参数为0
- using filesort:不能使用排好序的索引,要现场内存排序,很消耗性能
- using temporary:使用临时表,很消耗性能
- ref:使用索引列等值查询,与索引列进行等值匹配的对象信息
- rows:预估需要读取的记录条数,值越小越好
- filtered:经过搜索条件过滤后剩余记录条数的百分比,越高越好。单表查询意义不大,连接查询中决定被驱动表的要执行的次数