關於Oracle分頁

2021-04-06 18:37:17 字數 3950 閱讀 4747

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...