id
操作的唯一标识,值越大的操作越先执行
select_type
操作的类型,不同类型的查询效率不同.包括:
- simple,简单的select语句,查询中不包含自查询或者union
- primary,查询若包含任何复杂的子部分,最外层查询则被标记为primary
- subquery,在select或where列表中包含子查询
- derived,在from列表中包含自查询被标记为derived(衍生)MySQL会递归执行这些自查询,把结果放在临时表中
- union,若第二个select出现在union之后,则被标记为union.若 union包含在from子句子查询中,外层select将别标记为derived
- union result,从union表中获取结果的select
table
操作涉及的表
partitions
操作涉及的分区
type
查询使用的索引类型,按照性能排序如下
:::info
system > const > eq_ref > ref > range > index > all
:::
**system **
系统级,基本不会出现,忽略不计
count
常数索引,一般出现在使用唯一索引进行唯一性查询
eq_ref
唯一索引,只扫描一个匹配行
ref
非唯一索引,只扫描索引树的一小部分查找匹配行
range
范围扫描,使用索引范围查询,扫描索引树的一个范围查找匹配行
index
全索引扫描,遍历整个索引树查找匹配行,一般出现在不符合最左原则的查询
all
全表扫描,遍历全表查找匹配行,非索引字段查询
总结:
按照经验,查询应该优化到至少range级别,能达到ref最好
possible_keys
可能被查询优化器选择使用的索引
key
优化器选择使用的索引
key_len
索引的长度.长度越短,查询效率越高
ref
连接操作使用的索引
rows
操作需要扫描的数据行数
filtered
操作过滤掉的函数与扫描的行数的百分比.数值越大,查询得越准确
extra
额外信息,不在前面的列但是非常重要的其他信息,常见信息如下:
- Using filesort
使用文件排序,发生在无法使用索引排序时
- Using temporary
临时表保存中间结果;常见于排序order by和分组group by
- Using index
覆盖索引
- Using index condition
索引下推
- Using where
未索引覆盖,使用了where过滤
- Using join buffer
使用了链接缓存
- impossible where
where条件子句总是false
- distinct
优化distinct操作,在找到第一匹配的值后立即停止找相同值的动作
标签:union,Explain,查询,索引,计划,Using,执行,ref,select From: https://www.cnblogs.com/xxhahn/p/17346849.html