前几天找工作,面试到sql优化,explain命令应该大家都用到过,只是之前我也没注意过具体参数的含义,导致面试时很尴尬,事后学习了一下。
Explain命令是用来直接检查sql语句的,有两个参数很重要“Type”和“Extra”。
一、Type
Explain中的“Type”
MySQL的官网解释为:连接类型(the join type)。它描述了找到所需数据使用的扫描方式。
最为常见的扫描方式有:
1、system:系统表,少量数据,往往不需要进行磁盘IO;
2、const:常量连接;
3、eq_ref:主键索引(primary key)或者非空唯一索引(unique not null)等值扫描;
4、ref:非主键非唯一索引等值扫描;
5、range:范围扫描;
6、index:索引树扫描;
7、ALL:全表扫描(full table scan);
上面各类扫描方式由快到慢:
system > const > eq_ref > ref > range > index > ALL
1.1 system
扫码类型为system,说明数据已经加载到内存里,不需要进行磁盘IO。
这类扫描是速度最快的。
1.2 const
explain select id from account_user_base