Oracle分页排序数据混乱原因及解决
生活随笔
收集整理的這篇文章主要介紹了
Oracle分页排序数据混乱原因及解决
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
看這條分頁sql,其中order by statues_row中的statues_row字段不是唯一字段,而是一個必填的狀態字段里面例如內容是(1或者2或者3)
select * from(select * from table order by statues_row desc ) where rownum <4?多次查詢發現select * from table order by statues_row desc 這個結果集是有序的預期目標。
但是當SORT (ORDER BY STOPKEY)后會發現,根據rownum不同,其結果集不同,如果分頁的話有可能多頁都沒有要找的數據。
主要原因就是,Oracle 的order By 算法用的是快速排序算法。快速排序算法不是穩定的。所以當不斷切換rownum的時候,結果集會展示的數據不同。
ORDER BY STOPKEY,不需要對所有數據進行排序,而是只要找出結果集中的按特定順序的最前N條記錄,一旦找出了這N條記錄,就無需再對剩下的數據進行排序,而直接返回結果。
解決辦法就是order by 選擇唯一性質的字段,主鍵或是唯一索引字段后就不會出現這個問題。
例如
select * from(select * from table order by statues_row desc ,id desc ) where rownum <4總結
以上是生活随笔為你收集整理的Oracle分页排序数据混乱原因及解决的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 项目中常出现的问题及解决
- 下一篇: Oracle查询所有表结构和表名称及备注