pg数据库排序和limit同时使用遇到的奇怪问题

这两天由于一位实习生同事回学校答辩,因此我来跟进他之前开发的功能进行测试,测试反馈上来这么一个问题:

 

也就是说下面这两条sql查询出来的数据前10条的数据不一样。

select * from table WHERE display_status = '1' order by update_time desc LIMIT 20;
select * from table WHERE display_status = '1' order by update_time desc LIMIT 10;

查看执行计划如下:

可知,sql是先进行条件过滤,然后进行排序,最后进行limit,按此逻辑,limit 10和limit 20的前10条数据顺序应该是一模一样的,但根据结果来看顺序发生了变化,百思不得解。

最后观察数据发现:

很多数据的update_time字段值是一样的,突然恍然大悟,应该是因为时间值一样导致排序的时候顺序会出现随机变化。问题解决。

以后再遇到排序问题,不要总想着是不是数据库内部原因,很有可能是数据的原因导致!!

 

posted @ 2020-05-27 09:21  莫等、闲  阅读(1876)  评论(0编辑  收藏  举报