mysql 索引----Explain

150 阅读2分钟

1,字段 extra 包含其explain字段不适合显示但又十分重要的额外信息

标题
using filesort使用文件内排序
using tmporary使用临时表保存中间结果,常见于排序order by和分组group by
Using index表示覆盖索引即可满足查询要求,因而无需再回表查询
Using index for group by读取和分组都使用了覆盖索引
Using whereServer层对存储引擎层返回的数据做where条件过滤
impossiable wherewhere的值总fasle,不能获取任何记录
Using join buffer联表查询时使用的缓存策略,有Block Nested-Loop Join和Batched Key Access两种策略
Select tables optimized away在没有group by子句的情况下,基于索引优化的MAX/MIN操作,或者基于MyISAM存储引擎优化的COUNT(*)操作,不必等到执行阶段再进行计算,在查询计划生成阶段既可以完成优化
Distinct优化Distinct操作,在找到匹配的第一行记录后,立马停止查找同样的值

1,走索引和回表区别

EXPLAIN命令结果 Extra 列中的 Using Index意味着不会回表,通过索引就可以获得主要的数据;

Using Where则意味着需要回表取数据;

回表: 走到非主键索引 ----主键索引,就是回表

回表原因: 如果索引的列在 select 所需获得的列中(因为在 mysql 中索引是根据索引列的值进行排序的,所以索引节点中存在该列中的部分值)或者根据一次索引查询就能获得记录就不需要回表,如果 select 所需获得列中有大量的非索引列,索引就需要到表中找到相应的列的信息,这就叫回表。