ORDER BY id 为何效率不高

ORDER BY id 为何效率不高

背景

系统代码中有以下查询SQL,DBA要求优化;

SELECT id,
user_id,
patient_id,
his_id,
bill_no,
log_model
FROM platfom_fee_log
WHERE fee_channel = 2
AND gmt_create >= '2018-12-24 01:05:00'
AND gmt_create <= '2018-12-25 07:58:00'
AND (id_no = '370281198211092363' OR guarder_id_no = '370281198211092363')
ORDER BY id DESC
LIMIT 0,10

DBA验证的结论:

上述 sql 需要优化,现在 200s 返回,优化后 0.54s。order by id 改为 order by gmt_create

思考点

为什么order by id不行,而 order by gmt_create 效果更好?

DBA给出原因为:

order by id,mysql 的优化器会选择主键索引,但是 where 条件里又没有主键条件,导致全表扫描。
order by gmt_create,结合 where 条件里 gmt_create ,mysq 优化器会选择 gmt_create 索引,扫描的记录数少,效果更好。

知其然知其所以然

这篇博客中有进一步的解释;

更多详见Google

转载于:https://my.oschina.net/mengzhang6/blog/2999073

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值