MySQL之Explain关键字解析

Extra

Using index

  1. 表示相应的select操作中使用了覆盖索引,避免访问了表的数据行,效率不错!
  2. 如果同时出现using where,表明索引被用来执行索引键值查找。
  3. 如果没有同时出现using where,表明索引用来读取数据而非执行查找动作。

覆盖索引

select的数据列只需要从索引中就能够获取到,不比读取数据行,MySQL可以利用索引返回select列表中的字段,而不必根据索引再次读取数据文件,换句话说:查询列要被所建的索引覆盖。
比如:
* 已知现有索引:idx_col1_col2_col3
* 现有查询语句:select col1, col2 from t1
* 在这条语句中,select查询的列为col1和col2,而索引idx_col1_col2_col3中恰好包含col1和col2,所以这条语句可以实现索引覆盖。

using where

表明使用了where过滤

using join buffer

使用了连接缓存,当语句中多次出现join连接时,会出现此关键字。此时可以适当调大join buffer缓冲区的大小。

impossible where

where子句的值总是false,不能用来获取任何元组。
例如:select * from people where name = '张三' and name = '李四';
在这条SQL中,where的条件是name即等于张三有等于李四,一个人的名字不可能存在这种情况,此时MySQL会给出impossible where的关键字,表明where后的条件总是false。

select table optimized away

在没有group by子句的情况下,基于索引优化MIN/MAX操作或者对于MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化

distinct

优化distinct操作,在找到第一匹配的元组后即停止找同样值的动作

上一篇:MySQL学习整理(EXPLAIN 使用)


下一篇:Explain 工具