苏眠月|MySQL优化:explain、show profile和show processlist( 二 )

执行结果中的各个字段代表的含义如下(下文详解各个字段的意思)
苏眠月|MySQL优化:explain、show profile和show processlistid一系列数字 , 表示SQL语句执行的序列号 , 代表了操作的顺序 。 具体原则分为以下两点

  • id相同时 , 从上往下执行
  • id不同时 , 数值越大 , 优先级越高 , 越先执行
select_type主要是用来区分查询的类型 , 是普通查询、连接查询、还是子查询 。 值对应的解释如下
苏眠月|MySQL优化:explain、show profile和show processlisttable表示正在访问哪一张表 , 是表名或者别名 。 也有可能是临时表或者union的结果集 。
  • :是指ID值为M和N的行的并集 。
  • :引用ID值为N的行的派生表结果 。 派生表可能来自例如FROM子句中的子查询 。
  • :引用ID值为N的行的实例化子查询的结果
type描述如何联接表 , 表示SQL语句以何种方式去访问表 , 找到对应的数据 。 访问类型有很多 , 效率从高到低 , 分别为
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL一般情况下 , 得保证查询至少达到range级别 , 最好能达到ref
苏眠月|MySQL优化:explain、show profile和show processlistpossible_keys显示一个或者多个可能用于该SQL的索引 。
EXPLAIN SELECT * FROM emp e WHERE e.`ename` LIKE 'SIM%' AND e.`deptno` = 10执行结果
mysql> EXPLAIN SELECT * FROM emp e WHERE e.`ename` LIKE 'SIM%' AND e.`deptno` = 10;+----+-------------+-------+-------+----------------------------------+-----------------+---------+------+------+------------------------------------+| id | select_type | table | type| possible_keys| key| key_len | ref| rows | Extra|+----+-------------+-------+-------+----------------------------------+-----------------+---------+------+------+------------------------------------+|1 | SIMPLE| e| range | index_emp_ename,index_emp_deptno | index_emp_ename | 33| NULL |1 | Using index condition; Using where |+----+-------------+-------+-------+----------------------------------+-----------------+---------+------+------+------------------------------------+1 row in set (0.00 sec)key实际使用到的索引 , 如果NULL表示没有使用索引
EXPLAIN SELECT * FROM emp e WHERE e.`ename` LIKE 'SIM%' AND e.`deptno` = 10执行结果
mysql> EXPLAIN SELECT * FROM emp e WHERE e.`ename` LIKE 'SIM%' AND e.`deptno` = 10;+----+-------------+-------+-------+----------------------------------+-----------------+---------+------+------+------------------------------------+| id | select_type | table | type| possible_keys| key| key_len | ref| rows | Extra|+----+-------------+-------+-------+----------------------------------+-----------------+---------+------+------+------------------------------------+|1 | SIMPLE| e| range | index_emp_ename,index_emp_deptno | index_emp_ename | 33| NULL |1 | Using index condition; Using where |+----+-------------+-------+-------+----------------------------------+-----------------+---------+------+------+------------------------------------+1 row in set (0.00 sec)


推荐阅读