MySQL执行分析工具-ExPlain

58 阅读1分钟
explain select * from account where id=1;
+----+-------------+---------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
| id | select_type | table   | partitions | type  | possible_keys | key     | key_len | ref   | rows | filtered | Extra |
+----+-------------+---------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | account | NULL       | const | PRIMARY       | PRIMARY | 4       | const |    1 |   100.00 | NULL  |
**+----+-------------+---------+------------+-------+---------------+---------+---------+-------+------+----------+-------**
  • id:执行计划的id值,值越大,表示执行的优先级越高
  • select_type:当前查询语句的类型
    • simple:简单查询
    • primary:复杂查询的外层查询
    • subquery:包含在查询语句中的子查询
    • derived:包含在FROM中的子查询
  • table:表示当前这个执行计划是基于哪张表执行的
  • type:当前执行计划查询的类型,情况如下
    • all:全表查询,未命中索引或索引失效
    • system:查询表中仅有一条数据
    • const:当前SQL语句的查询条件中,可以命中索引查询
    • range:当前查询操作时差某个区间
    • eq_ref:表示在做多表关联查询
    • ref:使用了普通索引
    • index:目前SQL使用了辅助索引查询
  • possible_keys:优化器可能会选择的索引
  • key:查询语句执行用到的索引
  • key_len:索引字段使用的字节数
  • ref:使用了哪种查询类型
  • rows:可能会扫描的行数
  • filtered:通过表条件过滤出的行数百分比估计值
  • Extra:额外的索引使用信息
    • using index:覆盖索引查询
    • using where:使用了where子查询,表示没有使用索引
    • using ndex condition:使用了联合索引的前几个字段
    • using temporary:使用临时表处理查询结果
    • using filesort:索引字段之外进行排序,效率较低
    • select tables optimized away:在索引字段上使用了聚合函数