MySQL order by顺序随机

使用mySql order by 字段
如果该字段存在多个同一值。
譬如:

idnamecreate_time
120200513
220200513
320200513

select * from tb_name order by create_time
你多运行几次,会发现,出现的数据顺序不是固定的,可能会出现红白蓝,白蓝红,蓝红白……
特别提醒:
order by 多个字段,多个字段组合的值相同时候,也会出现这种情况.
mysql会对order by 字段数据相同的数据进行随机排序,所以同一条SQL查出的结果会出现排序不同的情况。
出现原因:
mysql的官方解释为:
If multiple rows have identical values in the ORDER BY columns, the server is free to return those rows in any order, and may do so differently depending on the overall execution plan. In other words, the sort order of those rows is nondeterministic with respect to the nonordered columns.
通俗点说就是,当出现多行相同值时,mysql会以随机的顺序返回查询结果,并且依据具体的执⾏计划会有不同。
解决建议:
综合表的数据结构进行改进。
譬如:
1.我的数据表,id是自增型(或者表里有其他id),那么我order by时候把唯一值的字段加上,就可以解决
2.依旧想只使用create_time,不想加入字段,那么应该考虑把时间准确到毫秒,在正常情况下,这个create_time不会重复。
3.你可以把order by这个字段直接建立索引,理论上来说,只要建立了索引,数据储存时候,它的位置顺序就会一定(我没有验证过,但应该可以)

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论

打赏作者

IsNullUndefined

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值