sql优化,order by 语句和索引是否失效的关系的理解

c1 c2 c3 c4四个字段产生一个联合索引。
select * from 表 where c1=1 and c2=5 order by c3
这个sql,c3字段排序走索引吗?
答案是:走索引。
原来我想的是,我的理解是c3不会走索引,因为假设有100条数据,通过c1 c2排序90条,这个期间没有用到c3排序。而剩下10条通过c3排序。也就是说只有10条数据的c3字段是有序的,剩下的90条数据不是通过c3才有序的,对于c3是无序的。如果order by c3走了索引,那么对于只有10条有序的情况下,产生的排序是不准确的。因为order by c3本意是,100条数据通过索引排序。因此c3不会走索引。

更正理解,如果是单纯的100条数据排序,那么自然和我上面说的一样。但是现在不是单纯的100条数据排序,事实上只有10条数据排序。
因为c1=1 and c2=5,这两个条件把其他90条数据都筛选掉了。可以理解为产生了一个只有10条数据的临时表,然后对这个临时表排序。那么这个临时表的索引结构是没有被破坏的,同c3自然可以走索引排序。不管是升序和降序,都可以走索引。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值