数据库笔记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语句中。 效率低