我们在工作中,对于 sql 的性能问题,可能会经常使用慢日志去查询,一般情况下,我们都能解决问题,不过在日常工作中,我们可能不只要查询 sql 的性能,还会去查询 sql 的执行效率以及它的类型,那么这个时候,我们就需要使用 explain 来进一步的了解了。
explain 被称为执行计划,我经常使用它来做索引效率的查询,今天详细介绍一下它都是能做什么。
-
id: 查询的唯一标识
-
select_type: 查询的类型
-
table: 查询的表, 可能是数据库中的表/视图,也可能是 FROM 中的子查询
-
type: 搜索数据的方法
-
possible_keys: 可能使用的索引
-
key: 最终决定要使用的key
-
key_len: 查询索引使用的字节数。通常越少越好
-
ref: 查询的列或常量
-
rows: 需要扫描的行数,估计值。通常越少越好
-
extra: 额外的信息
因为平时用做查询索引类型和执行效率,这里重点介绍type,其他的暂时不做多的介绍。
一、id: 包含一组数字,表示查询中执行select子句或操作表的顺序
Example(id相同,执行顺序由上至下)
二、type:表示MySQL在表中找到所需行的方式,又称“访问类型”
优先级排列顺序: ALL< index< range< ref< eq_ref< const< system< NULL
一般我们所常见的类型主要是前面四种,在一般情况下,如果类型是ref,就表明这个执行效率已经很好了。
ALL:Full Table Scan, MySQL将遍历全表以找到匹配的行
三、 possible_keys:指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用
四、key:显示MySQL在查询中实际使用的索引,若没有使用索引,显示为NULL
五、select_type:查询中每个select子句的类型(简单OR复杂)
六、key_len: 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的)
七、 ref: 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值
八、rows: 表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数
九、Extra:包含不适合在其他列中显示但十分重要的额外信息
注:文中的图片和一些字段介绍来源于网络上的文章。自己操作执行命令,不过截图效果不好,在网上找的其他人的命令结果。