麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

Oracle分頁查詢性能優(yōu)化代碼詳解

2024-08-29 14:00:33
字體:
供稿:網(wǎng)友

對于數(shù)據(jù)庫中表的數(shù)據(jù)的 Web 顯示,如果沒有展示順序的需要,而且因為滿足條件的記錄如此之多,就不得不對數(shù)據(jù)進行分頁處理。常常用戶并不是對所有數(shù)據(jù)都感興趣的,或者大部分情況下,他們只看前幾頁。

通常有以下兩種分頁技術(shù)可供選擇。

Select * from (Select rownum rn,t.* from table t)Where rn>&minnum and rn<=&maxnum或者Select * from (Select rownum rn,t.* from table t rownum<=&maxnum)Where rn>&minnum

看似相似的分頁語句,在響應(yīng)速度上其實有很大的差別。來看一個測試過程,首先創(chuàng)建一個測試表。

SQL>create table test as select * from dba_objects;

并反復(fù)地插入相同數(shù)據(jù)。

SQL>insert into test select * from test;

 

最后,查詢該表,可以看到該表的記錄數(shù)約為 80 萬條。

SQL> select count(*) from test COUNT(*)----------  831104

現(xiàn)在分別采用兩種分頁方式,在第一種分頁方式中:

SQL> select * from ( 2 select rownum rn,t.* from test t) 3 where rn>0 and rn <=50;  已選擇50行。已用時間: 00: 00: 01.03  Execution Plan----------------------------------------------------------  0   SELECT STATEMENT Optimizer=CHOOSE (Cost=10 Card=65 Bytes=12350)  1  0  VIEW (Cost=10 Card=65 Bytes=12350)  2  1   COUNT  3  2    TABLE ACCESS (FULL) OF 'TEST' (Cost=10 Card=65 Bytes=5590)  Statistics----------------------------------------------------------     0 recursive calls     0 db block gets   10246 consistent gets     0 physical reads     0 redo size     ……

可以看到,這種方式查詢第一頁的一致性讀有 10246 個,結(jié)果滿足了,但是效率是很差的,如果采用第二種方式:

SQL> select * from ( 2 select rownum rn,t.* from test t 3 where rownum <=50) 4 where rn>0; 已選擇50行。已用時間: 00: 00: 01.00 Execution Plan----------------------------------------------------------  0   SELECT STATEMENT Optimizer=CHOOSE (Cost=10 Card=50 Bytes=9500)  1  0  VIEW (Cost=10 Card=50 Bytes=9500)  2  1   COUNT (STOPKEY)  3  2    TABLE ACCESS (FULL) OF 'TEST' (Cost=10 Card=65 Bytes=5590) Statistics----------------------------------------------------------     0 recursive calls     0 db block gets     82 consistent gets     0 physical reads     0 redo size     ……

得到了同樣的結(jié)果,一致性讀只有 82 個,從以上的例子可以看到,通過把 rownum 引入到第二層,卻得到了一個完全不一樣的執(zhí)行計劃,注意在執(zhí)行計劃中的 stopkey,它是 8i 引入的新操 作,這種操作專門為提取 Top n 的需求做了優(yōu)化。

從上面的例子可以再想到,因為 stopkey 的功能影響到了分頁的一致性讀的多少,會不會越往后翻頁速度就越慢呢?事實也的確如此,例如:

SQL> select * from ( 2 select rownum rn,t.* from test t 3 where rownum <=10000) 4 where rn>9950; 已選擇50行。已用時間: 00: 00: 01.01 Statistics----------------------------------------------------------     0 recursive calls     0 db block gets    2616 consistent gets     0 physical reads     0 redo size     ……

選擇靠后一點的數(shù)據(jù)時,邏輯讀開始變大,當(dāng)選擇到最后幾頁時,一致性讀已經(jīng)與上面的相似了。

SQL> select * from ( 2 select rownum rn,t.* from test t 3 where rownum <=800000) 4 where rn>799950; 已選擇50行。已用時間: 00: 00: 01.03 Statistics----------------------------------------------------------     0 recursive calls     0 db block gets   10242 consistent gets     0 physical reads     0 redo size     ……

不過,所幸的是,大部分的用戶只看開始 5%的數(shù)據(jù),而沒有興趣看最后面的數(shù)據(jù),通過第二種改良的分頁技術(shù),可以方便快速地顯示前面的數(shù)據(jù),而且不會讓用戶感覺到慢。

總結(jié)

以上就是本文關(guān)于Oracle分頁查詢性能優(yōu)化代碼詳解的全部內(nèi)容,希望對大家有所幫助。歡迎大家參閱本站其他有關(guān)專題,有什么問題可以隨時留言,小編會及時回復(fù)大家的。


注:相關(guān)教程知識閱讀請移步到oracle教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产美女视频免费 | 黄色7777| 国产精品99久久久久久久 | 国产精品av久久久久久久久久 | 免费a级黄色片 | 万圣街在线观看免费完整版 | 99精品国产在热久久婷婷 | 中国美女一级黄色大片 | 久色网站 | 欧美一区二区三区久久精品视 | 91精品国 | 国产青草视频在线观看 | 国产精品7区 | 久久久久久久久久久久免费 | 久久网站热最新地址4 | 黄色免费高清网站 | 欧美a视频 | 在线观看一二三 | 毛片免费视频网站 | 久草手机在线观看视频 | 亚洲精品无码不卡在线播放he | 成人国产视频在线观看 | 情侣啪啪网站 | 污片视频网站 | 草妞视频 | 二级大黄大片高清在线视频 | www.成人在线 | 久久人添人人爽人人爽人人片av | xxxxhd73国产 | 亚洲亚色| www.9191.com| 91久久国产综合久久91猫猫 | 中文字幕免费看 | 韩国精品一区二区三区四区五区 | 国产精品v片在线观看不卡 成人一区二区三区在线 | 天堂成人国产精品一区 | 欧美日韩综合视频 | 视频一区二区三区在线播放 | 久久91精品久久久久清纯 | 久久国产精品小视频 | 日本高清无遮挡 |