mysql 自增_Mysql查询的默认排序是按自增id么?

今天咱来个简单粗暴的,直入主题,请看题目的灵魂拷问。

如题

现在数据库设计越来越规范了,一般的表都会要求加上自增id作为物理主键,用在一些像是分页查询的场景,确实能极大提高效率。那么问题来了,如果我们的sql不指定排序,查询出来的数据会是按自增id默认排序的么?

答案自然是否定的,要不我就不会写这篇文章了

2c267ae931566828e389441f86ddd64d.png

其实这么说也不完全准确,有时候还是能按顺序排的,那么与什么有关呢?

我们要掌握这个问题的精髓,默认顺序其实是按实际磁盘的物理存储顺序排的,看到这里很多读者就明白了,那就是说自增id顺序其实不一定是实际的物理存储顺序呗!

c2c579ce169ceedf91c6acd438401673.png

在不删不改的情况下,自增id和物理顺序是一致的,但实际场景不可能这样,再加上程序员大佬们就喜欢搞些骚操作,假如初始写入十条数据,后来把第一条数据删了,然后再插入一条,那么查询的时候这一条是在最开始还是最后呢,其实很可能是在最开始,当然我们期望他是在最后,因为他是自增id最大的,但数据库引擎优化可能会考虑利用之前删除的那块空间,把新数据填入,其实就是一种碎片优化策略,这样就导致自增id和物理存储顺序的不完全一致!

6d2ada7c64dca7f562544f03875feb1e.png

因此,如果我们需要查出来的数据是按自增id排序的,别忘了加上排序条件,这就又引出另一个问题,加上order by id后索引可能会出问题,经常走不到合适的索引了,只用了主键索引,关于这个深层次原因其实歪哥也没有搞特别清楚,数据库引擎优化的东西可能只有资深DBA能hold住吧,所以我们使用的时候一定要多留心,注意看下执行计划,不行就再加个带id的索引。 小小的数据库其实学问很多,我有点理解为啥要设置一个专门的DBA岗位了,大家感兴趣可以找点专门的数据库方面的书籍资料来看看,肯定会受益良多,歪哥也需要多补补课啦,哈哈 b048b656cce01fe4e28504d136cdfb96.png

留言区

a602416a7e7cfc01561b18b2a0f863f1.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值