Mysql

MySql 性能优化利器Explain

2019-05-14  本文已影响46人  接着奏乐接着舞S

MySQL 提供了一个 Explain 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化.

Explain 命令用法十分简单, 在 SELECT 语句前加上 Explain 就可以了, 例如:

Explain  SELECT * from test WHERE  id < 300;

Explain命令的输出内容

Expain出来的信息有10列,分别是id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra .
接下来我们来重点看一下比较重要的几个字段.

select_type 表示了查询的类型, 它的常用取值有:

table 表示查询涉及的表或衍生表

type

type 字段比较重要, 它提供了判断查询是否高效的重要依据依据. 通过 type 字段, 我们判断此次查询是 全表扫描 还是索引扫描等.
type 常用的取值有:

type 类型的性能比较

通常来说, 不同的 type 类型的性能关系如下:
all < index < range ~ index_merge < ref < eq_ref < const < system
all 类型因为是全表扫描, 因此在相同的查询条件下, 它是速度最慢的;而 index 类型的查询虽然不是全表扫描, 但是它扫描了所有的索引, 因此比 ALL 类型的稍快,后面的几种类型都是利用了索引来查询数据, 因此可以过滤部分或大部分数据, 因此查询效率就比较高了。

possible_keys

possible_keys 表示 MySQL 在查询时, 能够使用到的索引. 注意, 即使有些索引在 possible_keys 中出现, 但是并不表示此索引会真正地被 MySQL 使用到. MySQL 在查询时具体使用了哪些索引, 由 key 字段决定.

key

此字段是 MySQL 在当前查询时所真正使用到的索引.

key_len

表示查询优化器使用了索引的字节数. 这个字段可以评估组合索引是否完全被使用, 或只有最左部分字段被使用到.
key_len 的计算规则如下:

rows

rows 也是一个重要的字段;MySQL 查询优化器根据统计信息, 估算 SQL 要查找到结果集需要扫描读取的数据行数。这个值非常直观显示 SQL 的效率好坏, 原则上 rows 越少越好。

Extra

EXplain 中的很多额外的信息会在 Extra 字段显示, 常见的有以下几种内容:

上一篇下一篇

猜你喜欢

热点阅读