Mysql Explain总结
主要有:simple(简单) primary(外层主查询) subquery(子查询) union(联合)效率从低到高分别是ALL<index<range<ref<eq_ref<const。就是我们常用的全表扫描,压根没用到索引,要扫描表中的所有行。即索引覆盖到了 但是没有筛选条件 要遍历整个索引数。possible_keys:可能用到的索引。要扫描整个索引树,比全表扫描略好。id:越简单的查询i
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(,)
更多推荐
所有评论(0)