explain

76 阅读2分钟

慢查询日志和show profilel 可以让我们定位到慢SQL和具体耗费时间。explain则能够让我们对具体的一条SQL进行分析,可以看一条SQL执行过程中到底是否使用到了索引、表的连接情况,表的连接顺序。

用法:

在任何一条查询sql前,加上explain,例如

图片.png

这里需要注意的属性:idtypekey,还有ref

id 是查询的序列号,表示执行顺序,id值相同,从上往下执行,id值不同,值越大的越先执行

key 是 代表实际用到的索引

ref 列显示了在哪些列上使用了索引来查找行。它通常包含以下值:

  • const:表示只能匹配一行数据的唯一索引。因为只有一行,所以优化器可以将其视为常量。
  • func:表示使用了函数或表达式的索引查找。
  • NULL:没有使用索引。
  • 列名:表示使用了哪个列上的索引来查找行。

type 用来衡量性能,由好到差依次为:

NULL,  SYSTEM,   CONST,   EQ_REF, REF,   RANGE,   INDEX  , ALL

分别的含义是

CONST : 一般是主键(唯一索引)作为索引的情况

ref_eq : 它知道查找结果只有一个,即使用了主键或唯一索引

Ref :查找条件使用了索引,但是不是主键和unique,是其他索引,例如表的id是唯一索引,而查询时使用where name = '' ,name是索引,但不是唯一索引

Range : 是基于索引的,是有范围的索引扫描,同时除了显而易见的between,and以及'>','<'外,in和or也是索引范围扫描。

All : 表示”全表扫描”,即便找到了目标还是会继续扫描

index : 是另一种全表扫描

分析:

根据截图所示,这条查询的 type是RANGE,key是prymary,即性能是RANGE,实际用到的索引是prymary