数据库笔记4——explain命令

可以分析sql语句的类型、有没有使用到索引、分区

A、 id字段:id相同:id越靠前的表越先执行;id不同:id越大的表越先执行

B、 select_type 字段:

simple: 简单的 select 查询,查询中不包含子查询或者 union

primary:查询条件中包含有子查询时最外层的表

UNION:使用到union关联时,union关联的表

UNION RESULT():使用union时,最终的结果集表

SUBQUERY:条件子查询中的表

C、 partitions: 查看查询语句所使用到的分区

D、type字段:反应一段SQL语句性能指标的重要参数,可以通过此参数来判断是否使用到了索引、是否全表扫描、是 否范围查询等,以下效率从高到低

NULL:代表不访问任何表

system:表中只有一条记录,并且此表为系统表(一般很少出现)

const:通过唯一索引查询到的数据,只查询一次就查询到了

eq_ref:使用主键的关联查询,代表有其他表引用了该表的主键。

ref:通过非唯一索引查询到的数据

range:使用索引的范围查询(普通列的范围查询不会是range)

index:查询的是索引列,遍历了索引树

ALL:效率最低,遍历全表

E、  possible_keys 字段:

查询语句中,可能应用到的索引,并非实际使用到的索引。

F、  key 字段

key字段反应sql语句实际使用的索引,为null代表没有使用索引。

如果是复合索引,还要根据key_len字段结合判断具体用到了复合索引中的哪几个

G、 key_len 字段

表示索引中使用的字节数,公式=字符编码(utf8=3,utf8mb4=4)*长度+变长(2)或定长(1)+可空(1)或不肯空(0)

例如对列:name varchar(50) not null 建立索引,则key_len=4*50+2+0=202

H、rows 字段

根据表统计信息及选用情况,大致估算出找到所需的记录或所需读取的行数

I、   filtered字段

返回结果与实际结果的差值占总记录数的百分比

J、  extra 字段,以下效率从高到低

Using index:代表使用到了索引覆盖(只需要在一棵索引树上就能获取SQL所需的所有列数据,无需回表),效率高

NULL:没有用到额外的附加条件

Using where:扫描全表。通常是查询条件中不是索引字段

Using temporary:表示SQL语句的操作使用到了临时表

Using filesort:排序时无法使用到索引时,就会出现这个。常见于order by和group by语句中。 效率低

posted @ 2022-03-15 21:51  暗,伏!  阅读(149)  评论(0编辑  收藏  举报