Oracle分頁查詢詳解 四

2021-09-01 20:34:26 字數 1357 閱讀 1085

下面繼續看查詢的第三種情況,即內部迴圈包含排序的情況:

準備工作如下:

下面進行測試包含排序操作的分頁查詢。可以簡單的將查詢分為兩種不同情況,第一種排序列就是索引列,這種可以利用索引讀取,第二種排序列沒有索引。

第一種情況又可以細分為:完全索引掃瞄和通過索引掃瞄定位到表記錄兩種情況。

無論是那種情況,都可以通過索引的全掃瞄來避免排序的產生。看下面的例子:

這種情況下,通過索引可以完全得到查詢的結果,因此可以避免表掃瞄的產生。

由於不能僅僅通過索引掃瞄得到查詢結果,這裡

oracle

選擇了表掃瞄。這是由於初始化引數設定決定的。因此,建議在分頁的時候使用

first_rows

提示。

使用了first_rows

提示後,

oracle

不需要掃瞄全表,而且避免了排序操作。

下面討論最後一種情況,排序列不是索引列。這個時候排序不可避免,但是利用給出分頁格式,oracle不會對所有資料進行排序,而是只排序前n條記錄。

觀察兩種不同寫法的

order by

步驟,乙個是帶

stopkey

的order by

,另乙個不帶。對於第乙個查詢語句來說,進行的資料的全排序,排序資料量大,排序操作不得不在磁碟上完成,因此耗時比較多;而對於第二個查詢語句,

oracle

利用了order by stopkey

方式進行排序,排序操作只排序需要的

top n

的資料,因此排序操作放到了記憶體中。因此在大資料量需要排序的情況下,帶

stopkey

的效率要比不帶

stopkey

排序的效率高得多。

通過上面的例子可以看出給出的標準分頁查詢格式,對於包含排序的操作仍然可以在很大程度上提高分頁查詢效能。

Oracle分頁查詢詳解 一

oracle的分頁查詢語句基本上可以按照如下格式進行套用。分頁查詢格式 select from select a.rownum rn from select from table name a where rownum 5000 where rn 4000其中最內層的查詢select from ta...

Oracle 分頁查詢詳解(rownum 實現)

1.以偽列 rownum 作為分頁的實現方式,以下兩種方式實現效果最佳 2.咱在實現的時候,只需要關注 分頁的範圍 其它按下列情況套用即可 3.特別注意 排序 時,rownum 的位置 先排序,再取 rownum 注意值範圍,rownum 5 select tt.from select rownum...

詳解Oracle的幾種分頁查詢語句

分頁查詢格式 select from select a.rownum rn from select from table name a where rownum 40 where rn 21 其中最內層的查詢select from table name表示不進行翻頁的原始查詢語句。rownum 40...