Oracle分頁查詢:
Oracle的分頁查詢是沒有進行任何排序操作的,Oracle是順序的從數據塊中讀取符合條件的數據返回到客戶端。
而Oracle的排序算法不具有穩定性,也就是說,對於鍵值相等的數據,這種算法完成排序后,不保證這些鍵值相等的數據保持排序前的順序。
造成分頁查詢數據重復出現的原因是:在數據中,排序列值的不唯一性
解決方法如下(兩個條件必須同時滿足):
1.sql語句中需要有排序條件。
2.排序條件如果沒有唯一性,那么必須在后邊跟上一個唯一性的條件,比如主鍵(也可以使用rowid)。
備注:oracle默認采用rowid排序方式,所以我們只要在原來的排序規則后再加上rowid排序即可,同時也不會造成額外的性能損耗。
mysql分頁查詢:
MySQL 使用 limit 進行分頁時,可能會出現重復數據,通過加入 order by 子句可以解決,但是需要注意的是,如果排序字段有相同值的情況下,
由於排序字段數據重復,可能會導致每次查詢排序后結果順序不同,分頁還是會出現重復數據,這時可以加入第二個排序字段,提高排序的唯一性,
最好保證排序的字段在表中的值是唯一的,這樣就可以少寫一個排序字段,增加查詢效率,因為 order by 后面有多個排序字段時,無法用到索引。
備注:order by 多個字段時,用逗號分隔每一個字段,如果字段不指明排序方式,默認是增序
