今天看 《MySQL 是怎样允许的》和 《高性能MySQL》索引相关的部分,觉得有必要整理下 explain 中列的取值及含义。以后工作的时候翻阅查找更快。
type
type 取值 | 含义 |
---|---|
const | 使用主键 或 唯一二级索引 |
eq_ref | 被驱动表,用主键 或 唯一二级索引进行 (索引列不为空) |
ref | 普通的二级索引进行等值匹配 (索引列不为空) |
ref_or_null | 普通的二级索引进行等值匹配 (索引可以为空) |
index_merge | TODO 索引合并相关的内容待探索 |
unique_subquery | 查询优化器把 in 语句优化成 exists,使用了主键 或 唯一二级索引进行 (索引列不为空) |
index_subquery | 查询优化器把 in 语句优化成 exists,使用了普通索引 |
range | 范围扫描 |
index | 1. 使用索引覆盖, 但是要扫描全部的索引记录 where条件只命中部分索引 2. 全表扫描, 并且要对主键进行排序 |
all | 全表扫描 |
表示等值匹配用的是什么
【资料图】
ref 取值 | 含义 | 相关列 |
---|---|---|
const | 与key列的索引名等值匹配 | key |
表的列名 | 与该列进行等值匹配 | |
func | 函数 |
预计扫描的行数
是一个百分比数,key1 扫描的数作为分母, common_field 命中的结果为分子
select * from s1 where key1 > "z" and common_field = "a"
表关联的时候,这个指标比较重要,针对下表数据
table | rows | filtered |
---|---|---|
s1 | 9688 | 10 |
s2 | 1 | 100 |
extra 取值 | 含义 |
---|---|
Using index | 使用了索引覆盖 |
Using index condition | 使用了索引下推 |
Using where | 在 server 层进行了判断(没有索引的列) |
Using join buffer (Block Nested Loop) | 不能有效利用索引时,退而求其次使用缓存 |
Using filesort | 使用内存或者磁盘进行文件排序 |
Using temporary | 使用了临时表 |
client -> server -> 存储引擎,下推的意思是把筛选放到存储引擎,减少回表的数据量
形如 where key1 > xxx and key3 like ‘%a’ ,5.6 版本 like 的操作是在server层处理的,5.7.x的版本后可以在存储引擎层完成过滤。
select common_field, count(*) as amount from s1 group by common_field; -- 以上语句会被 mysql 补充为 select common_field, count(*) as amount from s1 group by common_field order by common_field; -- 如果要省略文件排序, 则显式声明为 order by null select common_field, count(*) as amount from s1 group by common_field order by null;
后记
TODO: 用 otpimzer trace 查询优化器的具体工作过程
到此这篇关于MySQL explain 中列的取值及含义的文章就介绍到这了,更多相关MySQL explain列的取值及含义内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
标签:
中新网5月24日电 据上海卫健委官方微信消息,2022年5月23日0—24时,上海新增本土新冠肺炎确诊病例58例和无症状感染者422例,其中39例确诊
“云健身”热背后的冷思考 国务院办公厅近日印发《“十四五”国民健康规划》,针对人民群众生命安全和身体健康事业做出诸多重要部署,其中,...
中国天气网讯 北京今天(5月24日)晴转阴,最高气温34℃;傍晚至夜间雷雨大风来袭,阵风7至8级,需注意防范。明天,北京最高气温将降至30℃
“全程网办”进一步畅通残疾人两项补贴申领渠道 实现补贴申领“一次都不跑” 本报记者 蒲晓磊 得益于残疾人两项补贴申请“跨省通办”的运行...