MySQL 查询优化器的使用
包含 EXPLAIN
我们将以在SELECT语句中包含EXPLAIN关键字为题专门写一本书,因为这个关键字能够返回 一个查询的大量信息。如果指定的索引并没有提高查询的性能,把 EXPLAIN 关键字插入查询中并重新运行。这个关键字将返回SELECT语句中用到的每一个表的数行信息。表B 列出了结果行信息的每一列并解释了其内容。
表B:列及其内容。
列 |
描述 |
table |
信息所代表的表 |
type |
查询使用的结合类型 |
possible_keys |
标识 MySQL可用索引 |
key_len |
表示使用键的长度 |
ref |
列出用来选取行的列或者常量 |
rows |
MySQL期望检查的行号 |
extra 附加信息 |
(参见下面表C) |
表C:更多信息
附加文本字符串 |
描述 |
distinct |
MySQL 因找到匹配项而停止查找 |
not exists |
MySQL 用 LEFT JOIN 对查询进行了优化,找到匹配 LEFT JOIN 项后将停止查找。
|
range checked for each record |
MySQL找不到合适的索引。将使用对每个行组合 比较好的索引 |
using filesort |
MySQL对符合 WHERE 准则的行进行标记然后 对标记行依键值排序。(需要附加的pass) 避免在同一查询中同时使用filesort和
temporary |
using index |
在所有列都是索引的一部分时使用,避免再对 每行定位读取 |
using temporary |
MySQL创建临时表存储查询结果;当ORDER BY基 于一列而不是GROUP BY列时使用 |
where |
使用WHERE语句限制匹配行数 |
运行EXPLAIN后,就可以开始分析并相应修改查询了。