(02)执行计划
1. explain语法
explain select ...;
执行计划大致包含以下信息

2. 常用属性
2.1. id
1、如果id相同,那么执行顺序从上到下
2、如果id不同,值越大优先级越高,越先被执行
3、id相同和不同的都存在,相同的可以认为是一组,从上往下顺序执行,在所有组中,id值越大,优先级越高,越先执行
2.2. select_type
| select_type | 说明 |
|---|---|
| SIMPLE | 简单查询,查询中不包含子查询或者UNION |
| PRIMARY | 查询中若包含任何复杂的子部分,最外层查询则被标记为PRIMARY |
| SUBQUERY | 在SELECT或WHERE列表中包含了子查询,该子查询被标记为SUBQUERY |
| DERIVED | 在FROM列表中包含的子查询被标记为DERIVED(衍生) |
| UNION | 若第二个SELECT出现在UNION之后,则被标记为UNION。若UNION包含在 FROM子句的子查询中,外层SELECT将被标记为DERIVED |
| UNION RESULT | 从UNION表获取结果的SELECT被标记为 UNION RESULT |
2.3. table
对应行正在访问哪一个表,表名或者别名
2.4. type
type是访问类型,效率从最好到最坏依次是:const>ref>range>index>all。一般情况下,得保证查询至少达到range级别,最好能达到ref
| type | 说明 |
|---|---|
| all | 遍历全表以找到匹配的行,一般情况下出现这样的sql语句而且数据量比较大的话那么就需要进行优化。 |
| index | 只遍历索引树。这个比all的效率要好 |
| range | 表示利用索引查询的时候限制了范围,在指定范围内进行查询,这样避免了index的全索引扫描,适用的操作符: =, <>, >, >=, <, <=, IS NULL, BETWEEN, LIKE, or IN() |
| ref | 非唯一性索引扫描,返回匹配某个单独值的所有行 |
| const | 表示通过索引一次就找到了,const用于查找primary key 或者 unique索引。因为只需匹配一行数据,所有很快。 |
2.5. possible_keys
显示可能在这张表中使用到的索引,一个或多个。
注意:是列出可能使用到的索引
2.6 key
在这张表中实际使用到的索引,如果为null,则没有使用索引
2.7 rows
执行查询时,估算的找到所需的记录需要读取的行数
2.8 Extra
| Extra | 说明 |
|---|---|
| Using index | 此值表示mysql将使用覆盖索引,以避免访问表。 |
| Using filessort | 表示使用文件排序,说明order by 没有走索引 |
| Using temporary | 对查询结果排序时会使用临时表 |
| Using where | Using where的作用只是提醒我们MySQL将用where子句来过滤结果集 |

浙公网安备 33010602011771号