关于紧凑索引扫描和松散索引扫描快慢的问题

关于紧凑索引扫描和松散索引扫描快慢的问题

select emp_no, min(salary)
from salaries
group by emp_no
select emp_no, sum(salary)
from salaries
group by emp_no;

发现下面的使用紧凑索引扫描反而更快,这是为什么呢?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
大目 2020-09-09 20:31:26

您好,执行出来的效果和预期不同原因有很多方面:

  1.  可以看下explain的结果,是否确实使用了松散索引扫描,从SQL来看,是会用的,但MySQL优化器是一个及其复杂的东西,如果优化器分析出来不走松散索引扫描开销更小,那也可能不用松散索引扫描的(可以借助OPTIMIZER TRACE分析MySQL选择的执行路径)

  2. 如果你运行MySQL的机器上运行了多个进程,那极有可能是性能抖动导致,我们知道,CPU的核心数是有限的,机器上部署的进程比较多的话,那么极有可能机器执行松散索引扫描时,MySQL并没有抢到时间片执行,或执行了一半被其他进程抢走了时间片,都是可能的;

  3. 可以多次测试求平均值,这样获得的效果更加客观一些。

  4. 建议测试时,在一个较大的数据量下进行。

祝您学习愉快!

  • 提问者 qq__6238 #1
    感谢大目老师的解释答疑,使用explain分析确实第一个的extra字段显示的是Using index for group-by,而第二个就是紧凑索引扫描,多次执行也一直都是紧凑扫描使用的时间更少(时间差了将近600ms),大目老师的意思是即使expain分析使用index for group-by,通过OPTIMIZER TRACE分析发现也显示使用了index for group-by,但是实际执行也可能不会使用吗?
    2020-09-09 20:46:55
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师