这两天由于一位实习生同事回学校答辩,因此我来跟进他之前开发的功能进行测试,测试反馈上来这么一个问题:
也就是说下面这两条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字段值是一样的,突然恍然大悟,应该是因为时间值一样导致排序的时候顺序会出现随机变化。问题解决。
以后再遇到排序问题,不要总想着是不是数据库内部原因,很有可能是数据的原因导致!!