Explain Extra常见输出解析
MySQL执行计划中的Extra列提供了关于查询计划中额外信息的详细说明。
绿色是好 红色是差
● Using index: 表示MySQL正在使用覆盖索引(covering index)来满足查询,这意味着MySQL可以仅通过索引而不必扫描表来获取所需的数据。
#索引覆盖
select id,name from t where name = 'Jane';
#回表提取
select name,birthday from t where name ='Jane';
Using index condition: 表示MySQL正在使用索引来执行WHERE子句中的条件过滤。(索引下推ICP)
create index idx_a_b on t(a,b)
# 示意索引结构
a b
1 a
1 b
1 c
2 a
2 b
2 c
select * from t where a=1 and b like '%a%'
MRR:Multi-Range Read,多块顺序读优化
select * from t where name in ( 'Jane' , 'Michael Jackson');
图1 低效随机读
图 2 MRR 转为顺序读
Using join buffer: 表示MySQL正在使用连接缓冲区来处理查询。连接缓冲区是一种内存结构,用于存储连接操作的中间结果,以便优化查询性能。
Distinct: 表示MySQL正在执行DISTINCT操作以过滤结果集中的重复记录,建议入库前做唯一校验,而不是查询时Distinct
select distinct a from t
● Using temporary: 表示MySQL需要创建一个临时表来处理查询。通常是由于涉及到排序(ORDER BY)和分组(GROUP BY)操作而导致的。
优化方法1:按排序字段顺序建索引
优化方法2:加内存,确保临时表能够装载到内存
# 在a字段建索引
select a from t group by a
● Using where: 表示MySQL正在使用WHERE子句来限制返回的结果集,但是无法使用索引来加速查询。
优化方法:加索引
原文地址:https://blog.csdn.net/qq_34249468/article/details/140639755
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!