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

key_len表示索引中使用的字节数 , 在满足需求的情况下 , 值越小越好 。
ref表示将哪些列或常量与索引进行比较 , 以从表中选择记录 。

  • 列名
EXPLAIN SELECT * FROM emp e1 LEFT JOIN emp e2 ON e1.`empno` = e2.`empno`执行结果
mysql> EXPLAIN SELECT * FROM emp e1 LEFT JOIN emp e2 ON e1.`empno` = e2.`empno`;+----+-------------+-------+--------+---------------+---------+---------+---------------+------+-------+| id | select_type | table | type| possible_keys | key| key_len | ref| rows | Extra |+----+-------------+-------+--------+---------------+---------+---------+---------------+------+-------+|1 | SIMPLE| e1| ALL| NULL| NULL| NULL| NULL|14 | NULL||1 | SIMPLE| e2| eq_ref | PRIMARY| PRIMARY | 4| test.e1.empno |1 | NULL|+----+-------------+-------+--------+---------------+---------+---------+---------------+------+-------+2 rows in set (0.00 sec)ref列中test.e1.empno分别表示数据库名、表(别)名 , 字段名 。
  • 常量
EXPLAIN SELECT * FROM emp WHERE ename = 'CLERK'执行结果
mysql> EXPLAIN SELECT * FROM emp WHERE ename = 'CLERK';+----+-------------+-------+------+-----------------+-----------------+---------+-------+------+-----------------------+| id | select_type | table | type | possible_keys| key| key_len | ref| rows | Extra|+----+-------------+-------+------+-----------------+-----------------+---------+-------+------+-----------------------+|1 | SIMPLE| emp| ref| index_emp_ename | index_emp_ename | 33| const |1 | Using index condition |+----+-------------+-------+------+-----------------+-----------------+---------+-------+------+-----------------------+1 row in set (0.00 sec)如果该值为func , 则使用的值是某些函数的结果 。
rows该SQL语句需要访问的大致行数 , 是一个估计值 。 但是这个值非常重要 , 在满足需求的情况下 , 越小越好 。
extra额外信息 。 其中常见比较重要的几种如下
苏眠月|MySQL优化:explain、show profile和show processlist以上便是explain关键字的使用方式以及含义 , 这个关键字的作用主要用来分析索引使用情况 。
需要了解的是:使用explain关键字进行分析时 , SQL语句并不会执行 。 只是模拟MySQL优化器的执行过程 , 所以用explain查看的结果是叫执行计划 。
使用show profileexplain关键字主要用来定性分析索引的使用情况 , 以及SQL语句的优劣 , 但是无法知道SQL语句的实际执行情况 。 而show profile命令可以做到定量分析SQL语句的执行情况 。 即使用者可以明确知道一条SQL到底执行了多久 。
想要使用这个命令 , 主要步骤可以分为四步:
  • 首先设置属性 ,
set profileing=1;开启了这个属性后 , 再执行SQL语句 , 就会记录SQL语句执行各个步骤耗时
  • 接下来再执行如下语句 , 显示统计成功的SQL语句
show profiles;执行结果
mysql> show profiles;+----------+------------+--------------------+| Query_ID | Duration| Query|+----------+------------+--------------------+|1 | 0.00065025 | select * from emp||2 | 0.00626150 | select * from dept |+----------+------------+--------------------+2 rows in set, 1 warning (0.00 sec)


推荐阅读