Mysql explain

    xiaoxiao2021-04-11  34

    说明

    explain命令是查看查询优化器如何决定执行查询的主要方法.

    调用方式

    explain select * from table (mysql5.6开始支持 update等 非select操作) 会显示下图的数据,列是固定的.

    列说明

    id列

    编号,标识select所属的行. 如果语句中没有子查询,关联表查询,那么只会有唯一的select,每一行在这个列都显示 1 , 否则 select语句一般会顺序编号,对应其在原始语句中的位置.

    select_type列

    select_type 查询类型说明SIMPLE简单的 select 查询,不使用 union 及子查询PRIMARY最外层的 select 查询UNIONUNION 中的第二个或随后的 select 查询,不依赖于外部查询的结果集DEPENDENT UNIONUNION 中的第二个或随后的 select 查询,依赖于外部查询的结果集SUBQUERY子查询中的第一个 select 查询,不依赖于外 部查询的结果集DEPENDENT SUBQUERY子查询中的第一个 select 查询,依赖于外部 查询的结果集DERIVED用于 from 子句里有子查询的情况。 MySQL 会 递归执行这些子查询, 把结果放在临时表里UNCACHEABLE SUBQUERY结果集不能被缓存的子查询,必须重新为外 层查询的每一行进行评估UNCACHEABLE UNIONUNION 中的第二个或随后的 select 查询,属 于不可缓存的子查询

    table 列

    输出行所引用的表名或者别名

    type 列

    All

    从头到尾,全表扫描

    index

    跟全表扫描一样,不过mysql扫描是按照的索引顺序而不是行顺序(非自然排序),通常情况会按照索引顺序访问行,产生随机行文本,开销很大,可以避免排序. 如果在extra列中看到 using index ,说明 正在使用覆盖索引,只扫描索引的数据,而不是行数据,开销会小很多

    range

    范围扫描就是一个有限制的索引扫描. 只检索给定范围的行,使用一个索引来选择 行。key 列显示使用了哪个索引。当使用=、 <>、>、>=、<、<=、IS NULL、<=>、BETWEEN 或者 IN 操作符,用常量比较关键字列时,可 以使用 range。

    ref

    索引访问,查找和扫描的混合体. where条件的查找使用索引就是最明显的例子.

    eq_ref , const , system

    索引访问,mysql最多返回一条数据,多用于唯一索引查找

    null

    优化过程中就已经得到结果,不在访问表或索引

    possible_keys 列

    这一列显示了mysql可以使用哪些索引

    key 列

    mysql决定采用哪个索引来对表进行访问,有可能索引并不是在 possible_keys 列中

    例如选择了覆盖索引

    ken_len 列

    显示mysql在索引字段中可能的最大长度,而不是表中数据使用的实际字节数.

    ref 列

    显示索引的哪一列被使用了

    rows 列

    mysql 估计为了找到所需要的数据而读取的行数,某些时候可以用来获取大概值,比如统计在线人数,不需要很精确的情况下.

    filtered 列

    mysql5.1里新加的,使用explain extended 时出现.

    所显示的是表里面某个条件的记录数的百分比所作的悲观估算

    extra 列

    常见如下:

    using index

    表示mysql使用覆盖索引,避免访问表.

    using where

    表示 MySQL 服务器从存储引擎收到行后再进行“后过滤”(Post-filter)。所谓“后过滤”,就是先读取整行数据,再检查此行是否符合 where 句的条件,符合就留下,不符合便丢弃。因为检查是在读取行后才进行的,所以称为“后过滤”。

    using temporary

    使用到临时表

    using filesort

    若查询所需的排序与使用的索引的排序一致,因为索引是已排序的,因此按索引的顺序读取结果返回,否则,在取得结果后,还需要按查询所需的顺序对结果进行排序,这时就会出现 Using filesort 。

    转载请注明原文地址: https://ju.6miu.com/read-666731.html

    最新回复(0)