MYSQL多个排序时出现的问题


工作中无意中发现的坑

在统计人员绩效的时候有限按照发布日期,群组id进行排序,然后进行分页就发生了奇怪的问题。。。

查询第2页的sql

1
2
3
SELECT * FROM book_performance_item 
WHERE is_deleted = 'N' AND team_id = '23' AND job = 'edit' AND pdate >= '2017-03-05' AND pdate <= '2017-03-05'
ORDER BY pdate DESC,`team_id`desc LIMIT 10 OFFSET 10

查询结果

查询第3页的sql

1
2
3
SELECT * FROM book_performance_item 
WHERE is_deleted = 'N' AND team_id = '23' AND job = 'edit' AND pdate >= '2017-03-05' AND pdate <= '2017-03-05'
ORDER BY pdate DESC,`team_id`desc LIMIT 10 OFFSET 20

查询结果

我很奇怪明明查的是两页的不同数据,为什么返回的数据是一样的呢?

推测

经过查询资料和与同事之间探讨,发现这可能是多个order by 查询时,当排序值都一样的时候,会造成排序乱序,
那我们在经过分页查询的时候很可能数据跟我们想要的结果就不一样了,这时我们需要增加一个排序值,这个排序值是唯一的就能避免上述问题
的发生了。具体为什么mysql会给出这样的结果就得研究mysql排序算法是怎么实现的或者去问问DBA了,由于现在能力有限,暂时
研究不了mysql源码。。。哈哈。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2019 史晨吉的博客 All Rights Reserved.

访客数 : | 访问量 :