1.explian检验sql是否走索引
2020-01-09 本文已影响0人
指尖架构141319
image.png
1.概述
explain 可以查询慢sql是否走索引,包括类型,是否全表搜索等信息共10列(id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra)
2.各列含义
-
select_type:示查询中每个select子句的类型
SIMPLE:简单select语句,不实用union或子查询等
PRIMARY:查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY
UNION:UNION中的第二个或后面的SELECT语句
UNION RESULT:UNION的结果
SUBQUERY:子查询中的第一个SELECT - table:查询的表名
-
type:联接类型,下面给出从最佳到最坏
system:表仅有一行(=系统表)。这是const联接类型的一个特例。
const:表最多有一个匹配行,它将在查询开始时被读取。
eq_ref:对于每个来自于前面的表的行组合,从该表中读取一行。
ref:对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取。
ref_or_null:该联接类型如同ref,但是添加了MySQL可以专门搜索包含NULL值的行。
index_merge:该联接类型表示使用了索引合并优化方法。
unique_subquery:该类型替换了下面形式的IN子查询的ref: value IN (SELECT primary_key FROM single_table WHERE some_expr) unique_subquery是一个索引查找函数,可以完全替换子查询,效率更高。
index_subquery:该联接类型类似于unique_subquery。可以替换IN子查询,但只适合下列形式的子查询中的非唯一索引: value IN (SELECT key_column FROM single_table WHERE some_expr)。
range:只检索给定范围的行,使用一个索引来选择行。
index:该联接类型与ALL相同,除了只有索引树被扫描。这通常比ALL快,因为索引文件通常比数据文件小。
ALL:对于每个来自于先前的表的行组合,进行完整的表扫描。 - possible_keys:能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用
- key:显示MySQL在查询中实际使用的索引,若没有使用索引,显示为NULL
- key_len:显示的值为索引字段的最大可能长度,并非实际使用长度
- ref:连接匹配条件,即哪些列或常量被用于查找索引列上的值
- rows:显示MySQL认为它执行查询时必须检查的行数。