查询分析
EXPLAIN
EXPLAIN SELECT * FROM `resource_device_expand`
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | resource_device_expand | ALL | 58 | 100.00 |
查询字段详解
id
- 每出现一个select分配一个id
- union因为要去重,会创建临时表
- Union all 在5.6之前可能也会用到临时表
select_type
- SUBQUERY
- SELECT列表中的子查询中的SELECT
- DERIVED
- FROM子句的子查询中的SELECT(派生
- UNION
- UNION中的第二个和随后的SELECT
- UNION RESULT
table
- 每条记录对应着某个单表的访问方法
partitions
- 表示查询时扫描的分区,如果没有使用分区表,则为 NULL
type
- ALL
- 全表扫描
- index
- 全表扫描,只扫描了索引树
- 覆盖索引,且条件满足所有数据
- 用到了索引(主键)排序,ses index没有出现在 Extra列中
- 查询列在二级索引上
- 全表扫描,只扫描了索引树
- range
- 范围查找
- 多个单点扫描或范围扫描
- ref
- 精确索引查找,匹配多条
- 使用非唯一索引等值查询时,每个索引项对应多行数据,因此查询执行时需要读取多次数据
- eq_ref
- 精确索引查找,匹配一条
- 使用唯一索引或主键等值查询时,每个表只有一行匹配,因此查询执行时只需要读取一次数据。
- system
- 查询只返回一行结果,因此只需读取系统表的一行数据。
- const
- 使用常数值进行比较时,MySQL 可以在查询执行过程中将查询结果缓存到一个常数值中。在这种情况下,MySQL 只需要读取一次数据,并使用常数值进行比较。
- 主键定位一条记录
- 唯一二级索引定位一条记录
key
- 用到的索引
key_len
- 索引用到的字节数
ref
- 索引和表之间的关系
- 表示在联接查询或子查询中,如何将前一个表的输出行与后一个表的索引行匹配。
rows
- 在执行查询时估算的每个操作要读取的行数
filtered
- 表示返回结果的行占总行数的比例
Extra
- Using index
- 使用覆盖索引
- index
- 全表扫描,只扫描了索引树
- UNION
- UNION中的第二个和随后的SELECT
- UNION RESULT
- Using filesort
- 使用了排序
- Block Nested Loop
- join的一种,被驱动无索引
- using MRR
- 使用了回表之前主键排序的优化
- Using temporary
- 用到了临时表,union的时候