SQL分頁查詢數據重復問題及解決方案


Oracle分頁查詢:

  Oracle的分頁查詢是沒有進行任何排序操作的,Oracle是順序的從數據塊中讀取符合條件的數據返回到客戶端。

  而Oracle的排序算法不具有穩定性,也就是說,對於鍵值相等的數據,這種算法完成排序后,不保證這些鍵值相等的數據保持排序前的順序。

造成分頁查詢數據重復出現的原因是:在數據中,排序列值的不唯一性

解決方法如下(兩個條件必須同時滿足)
  1.sql語句中需要有排序條件。
  2.排序條件如果沒有唯一性,那么必須在后邊跟上一個唯一性的條件,比如主鍵(也可以使用rowid)。

備注:oracle默認采用rowid排序方式,所以我們只要在原來的排序規則后再加上rowid排序即可,同時也不會造成額外的性能損耗。

 

mysql分頁查詢:

  MySQL 使用 limit 進行分頁時,可能會出現重復數據,通過加入 order by 子句可以解決,但是需要注意的是,如果排序字段有相同值的情況下,

由於排序字段數據重復,可能會導致每次查詢排序后結果順序不同,分頁還是會出現重復數據,這時可以加入第二個排序字段,提高排序的唯一性,

最好保證排序的字段在表中的值是唯一的,這樣就可以少寫一個排序字段,增加查詢效率,因為 order by 后面有多個排序字段時,無法用到索引。

備注:order by 多個字段時,用逗號分隔每一個字段,如果字段不指明排序方式,默認是增序


免責聲明!

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



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