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字段值是一樣的,突然恍然大悟,應該是因為時間值一樣導致排序的時候順序會出現隨機變化。問題解決。

以后再遇到排序問題,不要總想着是不是數據庫內部原因,很有可能是數據的原因導致!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM