explain是我们分析sql语句执行效率的重要工具

expliain分析后的结果主要有

id:越简单的查询id越小

select_type:查询的类型 简单查询 主查询 子查询等

table:要查询的表

type:访问的类型 一会重点总结

possible_keys:可能用到的索引

key:实际用到的索引

key_len:用到的索引长度

rer:索引的哪一列被使用

rows:要扫描的行数

filtered:过滤掉的百分比

Extra:一些额外信息,比如有没有覆盖所以 有没有用filesort

select_type

指示sql的查询类型,主要有:simple(简单) primary(外层主查询) subquery(子查询) union(联合)

也就是说一个复杂查询 explain 会查分成好几条

type:查询的类型

效率从低到高分别是ALL<index<range<ref<eq_ref<const

ALL:就是我们常用的全表扫描,压根没用到索引,要扫描表中的所有行

Index:全索引扫描,要扫描整个索引树,比全表扫描略好

即索引覆盖到了 但是没有筛选条件 要遍历整个索引数

range: 索引范围扫描,只检索给定范围的行 常见于between > <

索引覆盖到了且有筛选条件

ref: 非唯一索引的等值查询,高效 对索引列进行=查询

eq_ref:连接查询中用主键或唯一索引进行连接

cosnt: 用主键或唯一索引进行单行查询

查询效率至少要在range以上

Extra

一些额外信息,主要有是Using Index 、Using Where、Using filesort、Using temorary

Using Index:索引全部覆盖 不用回表 推荐!

Using Where: 用where进行了筛选 推荐!

Using filesort: 没有用索引进行排序 要在缓冲区(Sort Buffer)排序 不推荐!

Using temporary: 用到了临时表 常见于Order by group by

Using index condition:用到了索引但是需要回表

Using join buffer:连表查询时 被驱动表无索引  会把驱动表的一批数据加载缓冲区再到被驱动表查询 提高效率

添加索引的语句

Alter table t add index idx_XXX(,)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐