explain命令是查看优化器如何决定执行查询的主要方法,在查询语句前加explain即可
explain select * from t where c1 = (select id from t2 where id = 10);
| id |select_type|table|partitions| type | possible_keys | key | key_len | ref |rows| filtered | Extra |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+---------+
| 1 | PRIMARY | t | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL |
| 2 | SUBQUERY | t2 | NULL | const | PRIMARY | PRIMARY | 4 | const 1 | 100.00 | Using index |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+---------+
id:表示表的读取顺序或查询中执行select子句的顺序
select_type:表示select的类型,主要用于区别普通查询、联合查询、子查询等复杂查询
table:显示这一步访问的表名,有时候不是真实的表名,是第几步执行的结果
type:对表的访问方式,表示MySQL在表中找到所需行的方式,常见的访问类型有ALL、index、range、ref、eq_ref、const、system、NULL,从左到右性能从差变好
possible_keys:指出MySQ能使用那个索引找到行,如果匹配到索引这里就列出
key:表示MySQL决定使用的索引,如果没有选择索引就是NULL
key_len:显示索引中使用的字节数
ref:那些列或常量被用于查找索引列上的值
rows:表示MySQL根据表统计系统和索引选用情况,估算出要扫描的行数
Extra:额外信息
原文:https://www.cnblogs.com/manliu/p/14683641.html