婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > Oracle分頁(yè)查詢性能優(yōu)化代碼詳解

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

熱門標(biāo)簽:理財(cái)產(chǎn)品電銷機(jī)器人 南通電銷外呼系統(tǒng)哪家強(qiáng) 百度地圖標(biāo)注飯店位置怎么 地圖標(biāo)注的坐標(biāo)點(diǎn) 電話機(jī)器人那種好 上海網(wǎng)絡(luò)外呼系統(tǒng) 百度地圖標(biāo)注注解 區(qū)域地圖標(biāo)注怎么設(shè)置 外呼系統(tǒng)好點(diǎn)子

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

通常有以下兩種分頁(yè)技術(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è)語(yǔ)句,在響應(yīng)速度上其實(shí)有很大的差別。來(lái)看一個(gè)測(cè)試過(guò)程,首先創(chuàng)建一個(gè)測(cè)試表。

SQL>create table test as select * from dba_objects;

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

SQL>insert into test select * from test;

最后,查詢?cè)摫恚梢钥吹皆摫淼挠涗洈?shù)約為 80 萬(wàn)條。

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

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

SQL> select * from (
 2 select rownum rn,t.* from test t)
 3 where rn>0 and rn =50;
  
已選擇50行。
已用時(shí)間: 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
     ……

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

SQL> select * from (
 2 select rownum rn,t.* from test t
 3 where rownum =50)
 4 where rn>0;
 
已選擇50行。
已用時(shí)間: 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 個(gè),從以上的例子可以看到,通過(guò)把 rownum 引入到第二層,卻得到了一個(gè)完全不一樣的執(zhí)行計(jì)劃,注意在執(zhí)行計(jì)劃中的 stopkey,它是 8i 引入的新操 作,這種操作專門為提取 Top n 的需求做了優(yōu)化。

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

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

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

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

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

總結(jié)

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

您可能感興趣的文章:
  • oracle,mysql,SqlServer三種數(shù)據(jù)庫(kù)的分頁(yè)查詢的實(shí)例
  • Oracle實(shí)現(xiàn)分頁(yè)查詢的SQL語(yǔ)法匯總
  • Oracle、MySQL和SqlServe三種數(shù)據(jù)庫(kù)分頁(yè)查詢語(yǔ)句的區(qū)別介紹
  • Oracle分頁(yè)查詢的實(shí)例詳解
  • mysql、mssql及oracle分頁(yè)查詢方法詳解
  • 詳解SQLServer和Oracle的分頁(yè)查詢
  • 詳解oracle分頁(yè)查詢的基礎(chǔ)原理
  • oracle實(shí)現(xiàn)一對(duì)多數(shù)據(jù)分頁(yè)查詢篩選示例代碼
  • Oracle使用MyBatis中RowBounds實(shí)現(xiàn)分頁(yè)查詢功能
  • 簡(jiǎn)單實(shí)例解釋Oracle分頁(yè)查詢

標(biāo)簽:紹興 海東 百色 昭通 中衛(wèi) 遼源 寧波 自貢

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Oracle分頁(yè)查詢性能優(yōu)化代碼詳解》,本文關(guān)鍵詞  Oracle,分頁(yè),查詢,性能,優(yōu)化,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Oracle分頁(yè)查詢性能優(yōu)化代碼詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Oracle分頁(yè)查詢性能優(yōu)化代碼詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 金门县| 宣恩县| 遵义县| 靖州| 宕昌县| 隆子县| 航空| 大方县| 新竹市| 吉安县| 平阴县| 阳信县| 农安县| 循化| 文山县| 泸溪县| 清流县| 绍兴县| 泾源县| 安阳市| 朝阳区| 揭东县| 南城县| 千阳县| 金溪县| 达州市| 普格县| 塔城市| 余江县| 荣成市| 桂平市| 原阳县| 龙游县| 万全县| 江门市| 锡林郭勒盟| 佛冈县| 五常市| 石阡县| 汽车| 万源市|