connected to oracle9i enterprise edition release 9.2.0.6.0
connected as dev
sql>
sql> set timing on;
sql> create table test_table as
2 select rownum x
3 from dual
4 start with rownum = 1
5 connect by rownum <= 1000000;
table created
executed in 4.125 seconds
sql> --89991至90000行
sql> --a方法
sql> select *
2 from (select /*+ first_rows */
3 x, rownum num
4 from (select x from test_table order by x desc)
5 where rownum <= 90000)
6 where num >= 89991;
x num
---------- ----------
910010 89991
910009 89992
910008 89993
910007 89994
910006 89995
910005 89996
910004 89997
910003 89998
910002 89999
910001 90000
10 rows selected
executed in 4.579 seconds
sql> --b方法
sql> select *
2 from (select x, rownum num from (select x from test_table order by x desc))
3 where num between 89991 and 90000;
x num
---------- ----------
910010 89991
910009 89992
910008 89993
910007 89994
910006 89995
910005 89996
910004 89997
910003 89998
910002 89999
910001 90000
10 rows selected
executed in 6.891 seconds
sql> --1至10行
sql> --a方法
sql> select *
2 from (select /*+ first_rows */
3 x, rownum num
4 from (select x from test_table order by x desc)
5 where rownum <= 10)
6 where num >= 1;
x num
---------- ----------
1000000 1
999999 2
999998 3
999997 4
999996 5
999995 6
999994 7
999993 8
999992 9
999991 10
10 rows selected
executed in 1.844 seconds
sql> --b方法
sql> select *
2 from (select x, rownum num from (select x from test_table order by x desc))
3 where num between 1 and 10;
x num
---------- ----------
1000000 1
999999 2
999998 3
999997 4
999996 5
999995 6
999994 7
999993 8
999992 9
999991 10
10 rows selected
executed in 6.906 seconds
sql> --999991至1000000行
sql> --a方法
sql> select *
2 from (select /*+ first_rows */
3 x, rownum num
4 from (select x from test_table order by x desc)
5 where rownum <= 1000000)
6 where num >= 999991;
x num
---------- ----------
10 999991
9 999992
8 999993
7 999994
6 999995
5 999996
4 999997
3 999998
2 999999
1 1000000
10 rows selected
executed in 6.703 seconds
sql> --b方法
sql> select *
2 from (select x, rownum num from (select x from test_table order by x desc))
3 where num between 999991 and 1000000;
x num
---------- ----------
10 999991
9 999992
8 999993
7 999994
6 999995
5 999996
4 999997
3 999998
2 999999
1 1000000
10 rows selected
executed in 6.469 seconds
sql> drop table test_table;
table dropped
executed in 0.125 seconds
sql> --我們可以看到,a方法優於b方法,
sql> --特別是當分頁查詢的頁數靠前的時候,速度差別很明顯,
sql> --只是分頁在最後幾頁的時候,2種方法消耗的時間才差不多。
關於oracle分頁的學習
半個月前,同事問我各種資料庫分頁的sql會寫麼,我說mysql知道,oracle的想不起來了,於是在這個閒的蛋疼,又不想打遊戲睡覺的夜晚,寫篇筆記吧。oracle oracle分頁查詢sql語法 最高效的分頁 rbo和cbo的基本概念 sqlsererl不怎麼用,資料遷移的時候會接觸。sqlserv...
Oracle關於rownum排序分頁的問題
應該會有跟我一樣的朋友有這樣的需求,就是需要對select查詢的集合先進行一次排序 如 按建立時間排序 然後讓生成的rownum的順序與排序後的順序一致,但是用原始的rownum無法完成先排序後按排序後的順序分頁的需求,所以就用到了這個oracle函式row number over函式 demo s...
Oracle資料庫關於分頁查詢
今天寫專案,碰巧寫到分頁我用的oracle資料庫 剛開始沒注意用的還是mysql的分頁方式 limit關鍵字 剛執行就發現不對勁後來改為oracle資料庫的rownum,比mysql要複雜一些 如下 查詢0到10的資料 select from select rownum rn t.from sele...
oracle分頁和mysql分頁
mysql 分頁 查前5 資料 select from table name limit 0,5 select from table name limit 5 limit關鍵字的用法 limit offset,rows offset指定要返回的第一行的偏移量,rows第二個指定返回行的最大數目。初始...
oracle分頁以及mysql分頁
oracle分頁 分頁邏輯 第三層限制最小記錄數 第二層限制最大記錄數 第一層做條件限制 分頁例子 select from select from select rownum as rnum,empno from emp where rnum 10 where rnum 5 mysql分頁 sele...