可以帮助选择更好的索引和写出更优化的查询语句,可以帮助选择更好的索引和写出更优化的查询语句。对某个query优化中,需要不断的explain来验证各种调优是否有效。
EXPLAIN各列的含义:
id | Mysql Query Optimizer选定的执行计划中的序列号(查询序列号) |
select_type | select查询的类型,主要是区别普通查询和联合查询、子查询之类的复杂查询。 |
table | 所引用的表。 |
type | 显示的是访问类型,结果值从好到坏依次是: system > const > eq_ref > ref > fulltext > ref_or_null > range > index > ALL说明:
|
possible_keys | 指出MySQL能使用哪个索引在该表中找到行。如果是空的,没有相关的索引。 这时要提高性能,可通过检验WHERE子句,看是否引用某些字段,或者检查字段不是适合索引。 |
key | 显示MySQL实际决定使用的键。如果没有索引被选择,键是NULL |
ref | 显示哪个字段或常数与key一起被使用。 |
rows | 通过收集系统信息估算出来的结果记录条数 |
extra | 查询中,每一步会进行的额外信息 |
举例:
mysql > explain select mail from user where uid in(select user_id from share_info where share_id=1)
+----+--------------------+------------+-------+---------------+---------+---------+-------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+--------------------+------------+-------+---------------+---------+---------+-------+------+-------------+ | 1 | PRIMARY | user | ALL | NULL | NULL | NULL | NULL | 542 | Using where | | 2 | DEPENDENT SUBQUERY | share_info | const | PRIMARY | PRIMARY | 4 | const | 1 | | +----+--------------------+------------+-------+---------------+---------+---------+-------+------+-------------+
这里执行计划,是按照ID的大小,从大向小执行。
第一步,访问share_info,查询方式是:DEPENDENT SUBQUERY,对所需数据的访问方式是索引扫描,过滤的条件是常数,所以类型为const,所用到的索引是主键。