當前位置:
首頁 > 知識 > 分頁查詢最好加排序-order by

分頁查詢最好加排序-order by

昨天,與外部化系統對接時,發現有一個數據一直咩有集成到,雙方各自排查了自己系統的代碼,都覺得邏輯非常簡單,無法就是一個分頁查詢而已。

問題就出在這個分頁查詢上。

為了說明當時問題發生的情景,我模擬了一個SQL查詢:

以上是一段典型的Oracle資料庫的分頁查詢,又以查詢結果集的第1條至第800條數據。

如果想查詢第二頁的數據,只需要改到RN和ROWNUM即可。以下是查第二頁的數據的SQL:

問題背景

上述SQL中從MY_TABLE查詢結果集本身是沒有問題的,因為符合條件的數據總數是不會變的。但是有一個問題,從MY_TABLE查詢的結果集是沒有做排序的,意味著每次查詢的數據的位置可能發生變化。由於分頁查詢,其實是從MY_TABLE查詢查詢了多次,每次數據的位置不確定,導致查詢出來的結果,有可能查得出來,有可能查詢重複。這就是問題的根源。

解決方案

知道問題所在解決起來就簡單了,就是加排序。讓每次查詢出來的數據按到固定位置查出來就沒有了。以下是示例:

一般來說,排序的欄位最好是唯一值。如果是非唯一的欄位,那麼最好用多個能確定唯一性的欄位來實現排序也是可以的。否則無法啟動排序的效果,問題還是會出現。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 千鋒JAVA開發學院 的精彩文章:

刪除資料庫日誌文件的方法
怎麼用雲伺服器搭建個人網站

TAG:千鋒JAVA開發學院 |