场景:
在使用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
网友评论