首页 > 数据库技术 > 详细

mysql排序,同样的sql,mysql 每次查询结果顺序不一致

时间:2019-03-01 13:02:04      阅读:376      评论:0      收藏:0      [点我收藏+]

 

  某天项目中写了一句排序sql,但是发现每次执行的结果都不同,就是排序顺序不一样。

select * from table_tmp order by printStatus asc,dealTime desc

  查询了很多资料,也没找到一个比较确认的理由,只是较多人认为是由于缓存的存在。引用一下别人的回答:

  根数据库系统的算法有关,早期版本的算法是自然的多个线程二分法,那个线程先查到满足条件的数据就先输出出来,这样就是乱序的,后期经过改进按照主键自然排序输出。如果order by的值相同,一般是按自然排序,就是首个字符的字母或汉字的发音的首字母的s排序。order by的字段自然排序,如果你的order by 字段是resort,resort值相同的情况下,是可能有两种结果,一种就是你列出的随机排序,还有一种就是按主键来排序。这个问题不是固定的,还可能跟你的服务器性能都有关系,如果内存足够大,执行mysql的时候会提供足够大的缓冲池,也可能会出现另一种结果。所以很有可能是因为缓存的存在,在mysql客户端存在缓存,然后每一次查询都走缓存所以他的顺序不会发生改变。然而执行java程序顺序不一致,可能就是因为没有走缓存,每一次都是实时查询。也许java程序的这种结果本身就具有更多的可靠性。 

  

  知道问题的原因,解决就很简单了,不是由于order by后面的值相同才出现问题吗,那就再加个排序字段,比如id什么的;

select * from table_tmp order by printStatus asc,dealTime desc,id asc

 

mysql排序,同样的sql,mysql 每次查询结果顺序不一致

原文:https://www.cnblogs.com/DDgougou/p/10455762.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!