Mysql:explain
explain
mysql提供了一种方式,目的是为了让我们知道sql的执行顺序、索引使用情况、执行效率的情况
table
table是展示执行计划过程中,会使用到的表。
执行explain出现的每条记录都会对应一张单表(可能是存在表,可能是临时表)
id
执行explain后,处于同一个select语句的记录,都对应同一个且唯一ID。
相同ID的多行记录,执行顺序从上往下。
不同ID的多行记录,执行从下往上。
select_type
select_type能标识:每个select语句属于的查询类型。
- simple: 查询中不包含union或子查询的都算是simple类型
2.primary:在union的左边的select查询,以及子查询中外层select查询,属于primary类型- union: 在union中除最左边第一个select查询外,被union的select查询属于union类型
- subquery:在子查询中,且是不相关子查询,子查询中的select查询为subquery类型
- dependent subquery:在子查询中,且是相关子查询,子查询中的select查询为dependent subquery类型
- derived:from 或 连表时,如果表是查询出来的结果集,那么结果集的select查询为derived类型
tyoe
type表示此查询select对某个表访问的方法。
性能从好到坏依次如下:
system > const > eq_ref > ref > fulltext > ref_or_null > indexc_merge > unique_subquery > index_subquery > range > index > all
用到某个索引后,至少要达到range级别,最好是达到ref及以上。
possible_keys
possible_keys表示可能会使用到的索引
key
key表示实际用到的索引。记住:一个select语句中是可以触发多个索引的。
key_len
此字段主要针对联合索引的情况。表示实际用到索引的长度(字节数,联合索引中一般是越大越好)
rows
rows表示当前select查询预估查询的条数,越小越好
filter
filter表示经过某个搜索条件过滤后剩余记录数 占 rows的百分比值。比例越大越好