Mysql 之explain索引效率分析

一、explain语句

EXPLAIN [EXTENDED] SELECT select_options

二、字段分析

1、id

select识别符。这是select的查询序列号,id的值越大优先级别越高,越先被执行,如果id相同,执行顺序右上至下

2、select_type

select_type表示select语句的类型。

3、table

表示这一行的数据是关于哪张表的。

4、type

type表示的是表的连接类型。依次从最优到最差:system>const>eq_ref>ref>range>index>ALL

5、possible_keys

possible_keys列支出mysql能使用哪个索引在该表中找到行。如果这列是null,则没有相关的索引。在这种情况下,可以通过检查where子句查看它是否引用某些列或者适合索引的列来提高查询性能。如果是这样,可以创建适合的索引来提高查询的性能

6、key

key表示查询实际应用到的索引,如果没有选择索引,该列的值是null。想要强制使mysql使用或者忽视possible_type列中的索引,在查询中使用force index,use index 或者 ignore index。

7、key_len

key_len表示mysql选择的索引字段按字节计算的长度,如果键是null,则长度为null,注意通过key_len值可以确定mysql将实际使用一个多列索引中的几个字段

8、ref

ref表示使用哪个列或常数与索引一起来查询记录

9、rows

rows显示mysql表中进行查询时必须检查的行数

10、Extra

extra显示mysql在处理查询时的详细信息。

using index:覆盖索引

using where: 用where查找没有走索引,就需要优化

using index condition:查询的列如果不完全被索引覆盖 ,用到了最左原则

using temporary: 用到临时表,例:distinct去重,可以优化可以优化为using index,给去重列加索引,就会使用覆盖索引

using filesort:文件排序(内存排序,文件较大可能进行磁盘排序),可以优化为using index覆盖排序

三、索引效率分析

USING index 查询效率最高

Using where;USING index; 次于覆盖索引,使用了where过滤和索引查询

Using where 使用了where过滤

Using index condition; 使用了索引,但是要回表查询数据

Using filesort | Using temporary (两个差不多同级,效率都不高)

posted @ 2024-05-15 11:28  样子2018  阅读(40)  评论(0编辑  收藏  举报