参考原文出处:http://zhongmin2012.iteye.com/blog/2414577
explain能干嘛?
1、通过explain可以分析出表的读取顺序;
例如:id字段
2、数据读取操作的操作类型;
例如:select_type
3、哪些索引可以使用;
通过分析possible_keys字段
4、哪些索引被实际使用;
通过分析key字段
5、表之间的引用;
通过分析ref字段
6、每张表有多少行被优化器查询;
通过分析rows字段
先看一个例子:
mysql> explain select * from t_dictionary;
+----+-------------+--------------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+--------------+------------+------+---------------+------+---------+------+------+----------+-------+
| 1 | SIMPLE | t_dictionary | NULL | ALL | NULL | NULL | NULL | NULL | 154 | 100.00 | NULL |
+----+-------------+--------------+------------+------+---------------+------+---------+------+------+----------+-------
解释一下长长的每一行的含义:
id | select标识符号。分为三种情况:
|
select_typ | select类型一共有六个查询类型:
|
table | 所引用的表; |
type | 联接类型,下面按照从最佳类型到最坏类型的解释;
|
possible_keys | 查询的时候,可能用到那个索引找到匹配的行; |
key | 显示实际用到的索引,如果没有用到索引显示为NULL; |
key_len | 显示使用索引建的长度,如果没有使用索引显示为空;在相同的查询产出下; |
ref | 显示表之间的引用和以及关联关系; |
rows | 根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数; 总结:每张表有多少行被优化器查询;rows值越小越好; |
filtered | 显示了通过条件过滤出的行数的百分比估计值; |
extra | 包含不适合在其他列中显示但十分重要的额外信息;
|