Order By的坑

场景:
在使用orderby createtime按时间排序时,数据丢失。
原因:
有的作业时间是相同的
MySQL对limit的解释是:
如果多个行在列中具有相同的值ORDER BY,则服务器可以按任意顺序自由返回这些行,并且根据总体执行计划可能会有所不同。换句话说,这些行的排序顺序是非确定性的。即每次对于相同的值order by limit时,返回的行是不完全一致的,这样问题就出现了。
根据这句话我们可以发现,在order by的值相同时,返回的顺序不一定一致。
在MySQL 5.6版本,优化器在遇到order by xxx limit x,x 时,会做一个优化,使用优先队列,来进行排序,这样的好处在于在排序过程中,仅保留需要的n条数据即可。

解决:
order by后加一个唯一字段(id)进行排序

换句话说凡是排序字段存在不唯一的情况,都需要加上按主键id列排序

vans.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 字段排序显示。市民表,城市是“杭州”,姓名排序返回前 1000 姓名、年龄。 select city,name,a...
    hedgehog1112阅读 690评论 0 0
  • 0 索引 1 概述2 索引扫描排序和文件排序简介3 索引扫描排序执行过程分析4 文件排序5 补充说明6 参考资料 ...
    llinvokerl阅读 3,088评论 0 6
  • 1.表中的任何列都可以作为主键, 只要它满足以下条件:任意两行都不具有相同的主键值;每一行都必须具有一个主键值( ...
    Cherryjs阅读 774评论 0 0
  • .数据库 数据库的发展: 文件系统(使用磁盘文件来存储数据)=>第一代数据库(出现了网状模型,层次模型的数据库)=...
    小Q逛逛阅读 1,010评论 0 2
  • 数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。...
    花神子阅读 580评论 2 1