[轉]oracle 使用leading, use_nl, rownum調優例子
/*+LEADING(TABLE)*/
將指定的表作為連線次序中的首表.
/*+USE_NL(TABLE)*/
將指定表與巢狀的連線的行源進行連線,並把指定表作為內部表.
成本計算方法:
設小表100行,大表100000行。
兩表均有索引:
如果小表在內,大表在外(驅動表)的話,則掃描次數為:
100000+100000*2 (其中2表示IO次數,一次索引,一次資料)
如果大表在內,小表在外(驅動表)的話,則掃描次數為:
100+100*2.
兩表均無索引:
如果小表在內,大表在外的話,則掃描次數為:
100000+100*100000
如果大表在內,小表在外的話,則掃描次數為:
100+100000*100
注意:如果一個表有索引,一個表沒有索引,ORACLE會將沒有索引的表作驅動表。如果兩個表都有索引,則外表作驅動表。如果兩個都沒索引的話,則也是外表作驅動表。
2、使用index直接匹配索引來查詢資料提高查詢速度
/*+INDEX(TABLE INDEX_NAME)*/
表明對錶選擇索引的掃描方法.
3、當判斷某幾個表中是否存在某種關係的行時可使用rownum=1來作為條件而加快速度,如果必須有多行才滿足條件時,可設定rownum <= n。
例如:獲得一個v_count值判斷是否大於0
equipment表 幾萬條,controledpnsnrange 幾千條
select
count(sc.pmnum)
into
v_count
from
equipment e,
sal_controledpnsnrange sc
where
(sc.new_min_item_no <= e.itemnum)
and (sc.new_max_item_no >= e.itemnum)
and (sc.new_min_serial_no <= e.serialnum)
and (sc.new_max_serial_no >= e.serialnum)
and e.itemnum = a_item_no;
執行時間大約為3分鐘。
程式碼修改後:
select /*+ leading(e) use_nl(sc) */
count(sc.pmnum)
into
v_count
from
equipment e,
sal_controledpnsnrange sc
where
(sc.new_min_item_no <= e.itemnum)
and (sc.new_max_item_no >= e.itemnum)
and (sc.new_min_serial_no <= e.serialnum)
and (sc.new_max_serial_no >= e.serialnum)
and e.itemnum = a_item_no;
執行時間大約為45秒。
程式碼再次修改後:
select /*+ leading(e) use_nl(sc) */
count(sc.pmnum)
into
v_count
from
equipment e,
sal_controledpnsnrange sc
where
(sc.new_min_item_no <= e.itemnum)
and (sc.new_max_item_no >= e.itemnum)
and (sc.new_min_serial_no <= e.serialnum)
and (sc.new_max_serial_no >= e.serialnum)
and e.itemnum = a_item_no
and rownum = 1;
執行時間大約為4秒。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10742223/viewspace-235562/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 使用leading, use_nl, rownum調優例子Oracle
- 轉摘_使用leading(,)優化sql執行計劃優化SQL
- oracle的調優(轉)Oracle
- Oracle常用調優手段[轉]Oracle
- Oracle的rownum原理和使用Oracle
- ORACLE 中ROWNUM用法總結! (轉)Oracle
- Oracle ROWNUMOracle
- Oracle專家調優秘密(轉)Oracle
- 使用leading(,)優化sql執行計劃優化SQL
- oracle的rownumOracle
- Oracle專家調優祕密(轉)Oracle
- ORACLE 中ROWNUM(偽列)用法解析(轉載)Oracle
- oracle hint_leadingOracle
- oracle 使用rownum進行分頁的陷阱Oracle
- oracle偽列rownumOracle
- Oracle中的rownumOracle
- 使用rownum及replace實現行轉列
- Oracle常見hint(leading)Oracle
- ORACLE調優方法Oracle
- oracle sql調優OracleSQL
- oracle效能調優Oracle
- 【oracle rowid與rownum的使用與區別 】Oracle
- oracle 使用rownum進行分頁的陷阱(2)Oracle
- Oracle:On ROWNUM and Limiting ResultsOracleMIT
- lightdb -- Oracle相容 -- rownumOracle
- 【 Oracle中rownum的用法 】Oracle
- Oracle rownum 分頁引起的效率問題及優化思路Oracle優化
- Oracle leading vs. ordered hintsOracle
- 【Oracle】-【ROWNUM與索引】-索引對ROWNUM檢索的影響Oracle索引
- Oracle中rownum與rowid使用上的問題Oracle
- SQL hint中正確使用use_nl提示SQL
- Oracle常用調優手段Oracle
- Oracle 調優總結Oracle
- 淺談Oracle調優Oracle
- Oracle調優總結Oracle
- Oracle 效能調優 概述Oracle
- oracle expdp和impdp使用例子Oracle
- Oracle Rownum分頁改寫Oracle