mysql中联合索引排序的问题

背景

在test数据库中,查询一组数据会根据id进行排序,而同样的条件在pre数据库中查询却没有根据默认的id主键来排序,于是激起了好奇心。

 

情况

正常情况下,在默认没有写order by条件的情况下,查询出来的结果会根据id主键从小到大的排序,例如在测试环境中会有:

但是在pre数据库中,则有:

分析

到底是什么原因导致了没有根据id来排序呢?第一点想到的一定是与表结构定义有关,左侧是test的表定义,右侧是pre的表定义

可以看到,两个表的只有索引不一样,在test数据库下,走的是INDEX_PLAN_ID的索引,而在pre数据库下,走的是联合索引idx_teach_plan_question,可能排序就与索引有关

 

验证

test数据库sql解释

pre数据库sql解释

发现查询条件走的索引和分析的一致。

另外当我们删除掉test数据库中该表的INDEX_PLAN_ID索引后,也会出现id乱序的情况,从另一个方面也验证了根据联合索引的排序。

 

结论

若查询条件中没有走索引,或者是走的普通索引,结果都会按照id主键从小到大排序

若查询条件走联合索引,则结果会按照联合索引的从左到右的字段先后顺序排序。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值