Mysql查詢使用limit分頁,同時使用order by可能產生的問題


昨天遇到一個比較詭異的問題,在使用MySQL分頁查詢數據的時候,

有的數據明明數據庫里有,但是就是查不出來,有的數據卻反而會

重復出現。

這里面就涉及到一個MySQL自身的問題。

具體現象大概是:

當使用order by 的字段有多個相同的結果,同時,此次結果不足以把

數據完全顯示出來的時候。比如,使用order by對count字段排序,

同時使用limit 10規定取前10條。但是實際數據不止10條,那么,當使用sql

查詢第二頁的時候,也就是,使用limit 10,10來取第11-20條。取出的數據

是跟預期的並不一致的,有可能出現上一頁的數據。

找一個解釋比較清楚的網址

通俗點解釋就是,order by 的字段在遇到相同值的時候,如果要取的數據

不是同一數據規模(比如,取前10個,和取11到20個[大概是先取20個,然后再

取11到20])是不同的取值規律。上面的文章中說是隨機的,可能不准確,

應該是有不同的優化取值算法,所以情況不同,算法不同,結果不同。

比較合適的解決方案是,使用order by的時候,另外添加一個各數據唯一的字段。

比如,主鍵。。雖然有的說,會影響查詢速度。不過,有什么辦法呢,總比數據

不准確要好。


免責聲明!

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



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