MySQL的explain命令详解(2)

range 范围扫描,表示在给定的范围内进行扫描,会使用到索引,性能较好。如:

explain select id,first_name from people where id < 3; 或 explain select id,first_name from people where last_name BETWEEN 'Allen' And 'Clinton';

ref 常规索引匹配扫描,表示用到的索引是常规索引(也叫普通索引),性能较好。需要注意的是,复合索引中的列顺序,要想使索引生效,需遵循最左前缀匹配法则。如:

explain select id,first_name from people where last_name='Allen' and first_name='Cuba';

eq_ref 索引关联扫描,联表查询时,如果关联的键是主键,就会出现这个值。性能较好。

const 常量引用扫描,表示用到的索引是主键或唯一索引,索引会等值匹配一个定值。性能最好。如:

explain select id,first_name from people where id=3;

5. possible_keys

表示当前查询可能用到的索引,这个值不太重要。

6. key

表示当前查询实际用到的索引。

7. key_len

表示当前查询用到的索引的长度(字节数)。

8. ref

表示索引的哪一列被用到了,如果是等值匹配索引,则是一个常数 const。

9. rows

表示当前查询实际扫描的行数。值越小越好。这个参数非常重要。

10. Extra

表示当前查询的额外信息,比如是根据什么方式排序的,获取数据的方式等。下面列举几个Extra参数常见的值:

using filesort 表示当前查询做了额外的步骤将结果集进行文件排序。如果看到这个值,就需要进行优化了。

using temporary 表示当前查询使用了一个临时表来存储结果。如果看到这个值,也需要进行优化。

using index 表示只使用索引就可以满足全部的查询需求,不需要再回表查询数据行,通常称之为索引覆盖查询。

通常,如果我们明确知道了哪条SQL查询语句效率很差,就可以用 explain 或 desc 来分析该SQL语句。但是,大多数情况下,我们并不知道是哪些SQL查询语句有问题,一般都是开启MySQL的慢查询日志,通过慢查询日志来确定查询效率较慢的问题SQL,然后再对这些问题SQL进行分析和优化。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/64020da3d165e982bd09616d415cf17d.html