亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

Oracle10g常見HINT的用法

2024-08-29 13:53:52
字體:
來源:轉載
供稿:網友
語法:
提示里不區分大小寫, 多個提示用空格分開, 如:select /*+ hint1(tab1) hint2(TAB1 idx1) */ col1, col2 from tab1 where col1='xxx';
如果表使用了別名, 那么提示里也必須使用別名, 如:select /*+ hint1(t1) */ col1, col2 from tab1 t1 where col1='xxx';

在SQL優化過程中常見HINT的用法(前10個比較常用, 前3個最常用):

1. /*+ INDEX */ 和 /*+ INDEX(TABLE INDEX1, index2) */ 和 /*+ INDEX(tab1.col1 tab2.col2) */ 和 /*+ NO_INDEX */ 和 /*+ NO_INDEX(TABLE INDEX1, index2) */
表明對表選擇索引的掃描方法. 第一種不指定索引名是讓Oracle對表中可用索引比較并選擇某個最佳索引; 第二種是指定索引名且可指定多個索引; 第三種是10g開始有的, 指定列名, 且表名可不用別名; 第四種即全表掃描; 第五種表示禁用某個索引, 特別適合于準備刪除某個索引前的評估操作. 如果同時使用了INDEX和NO_INDEX則兩個提示都會被忽略掉.
例如:SELECT /*+ INDEX(BSEMPMS SEX_INDEX) USE SEX_INDEX BECAUSE THERE ARE FEWMALE BSEMPMS */ FROM BSEMPMS WHERE SEX='M';

2. /*+ ORDERED */
FROM子句中默認最后一個表是驅動表,ORDERED將from子句中第一個表作為驅動表. 特別適合于多表連接非常慢時嘗試.
例如:SELECT /*+ ORDERED */ A.COL1,B.COL2,C.COL3 FROM TABLE1 A,TABLE2 B,TABLE3 C WHERE A.COL1=B.COL1 AND B.COL1=C.COL1;

3. /*+ PARALLEL(table1,DEGREE) */ 和 /*+ NO_PARALLEL(table1) */
該提示會將需要執行全表掃描的查詢分成多個部分(并行度)執行, 然后在不同的操作系統進程中處理每個部分. 該提示還可用于DML語句. 如果SQL里還有排序操作, 進程數會翻倍,此外還有一個一個負責組合這些部分的進程,如下面的例子會產生9個進程. 如果在提示中沒有指定DEGREE, 那么就會使用創建表時的默認值. 該提示在默認情況下會使用APPEND提示. NO_PARALLEL是禁止并行操作,否則語句會使用由于定義了并行對象而產生的并行處理.
例如:select /*+ PARALLEL(tab_test,4) */ col1, col2 from tab_test order by col2;

4. /*+ FIRST_ROWS */ 和 /*+ FIRST_ROWS(n) */
表示用最快速度獲得第1/n行, 獲得最佳響應時間, 使資源消耗最小化.
在update和delete語句里會被忽略, 使用分組語句如group by/distinct/intersect/minus/union時也會被忽略.
例如:SELECT /*+ FIRST_ROWS */ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';

5. /*+ RULE */
表明對語句塊選擇基于規則的優化方法.
例如:SELECT /*+ RULE */ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';

6. /*+ FULL(TABLE) */
表明對表選擇全局掃描的方法.
例如:SELECT /*+ FULL(A) */ EMP_NO,EMP_NAM FROM BSEMPMS A WHERE EMP_NO='SCOTT';

7. /*+ LEADING(TABLE) */
類似于ORDERED提示, 將指定的表作為連接次序中的驅動表.

8. /*+ USE_NL(TABLE1,TABLE2) */
將指定表與嵌套的連接的行源進行連接,以最快速度返回第一行再連接,與USE_MERGE剛好相反.
例如:SELECT /*+ ORDERED USE_NL(BSEMPMS) */ BSDPTMS.DPT_NO,BSEMPMS.EMP_NO,BSEMPMS.EMP_NAM FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

9. /*+ APPEND */ 和 /*+ NOAPPEND */
直接插入到表的最后,該提示不會檢查當前是否有插入操作所需的塊空間而是直接添加到新塊中, 所以可以提高速度. 當然也會浪費些空間, 因為它不會使用那些做了delete操作的塊空間. NOAPPEND提示則相反,所以會取消PARALLEL提示的默認APPEND提示.
例如:insert /*+ append */ into test1 select * from test4;
insert /*+ parallel(test1) noappend */ into test1 select * from test4;

10. /*+ USE_HASH(TABLE1,table2) */
將指定的表與其它行源通過哈希連接方式連接起來.為較大的結果集提供最佳響應時間. 類似于在連接表的結果中遍歷每個表上每個結果的嵌套循環, 指定的hash表將被放入內存, 所以需要有足夠的內存(hash_area_size或pga_aggregate_target)才能保證語句正確執行, 否則將在磁盤里進行.
例如:SELECT /*+ USE_HASH(BSEMPMS,BSDPTMS) */ * FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

----------------------------------------------------------------------------------------------------

11. /*+ USE_MERGE(TABLE) */
將指定的表與其它行源通過合并排序連接方式連接起來.特別適合于那種在多個表大量行上進行集合操作的查詢, 它會將指定表檢索到的的所有行排序后再被合并, 與USE_NL剛好相反.
例如:SELECT /*+ USE_MERGE(BSEMPMS,BSDPTMS) */ * FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

12. /*+ ALL_ROWS */
表明對語句塊選擇基于開銷的優化方法,并獲得最佳吞吐量,使資源消耗最小化. 可能會限制某些索引的使用.
例如:SELECT /*+ ALL+_ROWS */ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';

13. /*+ CLUSTER(TABLE) */
提示明確表明對指定表選擇簇掃描的訪問方法. 如果經常訪問連接表但很少修改它, 那就使用集群提示.
例如:SELECT /*+ CLUSTER */ BSEMPMS.EMP_NO,DPT_NO FROM BSEMPMS,BSDPTMS WHERE DPT_NO='TEC304' AND BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

14. /*+ INDEX_ASC(TABLE INDEX1, INDEX2) */
表明對表選擇索引升序的掃描方法. 從8i開始, 這個提示和INDEX提示功能一樣, 因為默認oracle就是按照升序掃描索引的, 除非未來oracle還退出降序掃描索引.
例如:SELECT /*+ INDEX_ASC(BSEMPMS PK_BSEMPMS) */ FROM BSEMPMS WHERE DPT_NO='SCOTT';

15. /*+ INDEX_COMBINE(TABLE INDEX1, INDEX2) */
指定多個位圖索引, 對于B樹索引則使用INDEX這個提示,如果INDEX_COMBINE中沒有提供作為參數的索引,將選擇出位圖索引的布爾組合方式.
例如:SELECT /*+ INDEX_COMBINE(BSEMPMS SAL_BMI HIREDATE_BMI) */ * FROM BSEMPMS WHERE SAL<5000000 AND HIREDATE<SYSDATE;

16. /*+ INDEX_JOIN(TABLE INDEX1, INDEX2) */
合并索引, 所有數據都已經包含在這兩個索引里, 不會再去訪問表, 比使用索引并通過rowid去掃描表要快5倍.
例如:SELECT /*+ INDEX_JOIN(BSEMPMS SAL_HMI HIREDATE_BMI) */ SAL,HIREDATE FROM BSEMPMS WHERE SAL<60000;

17. /*+ INDEX_DESC(TABLE INDEX1, INDEX2) */
表明對表選擇索引降序的掃描方法.
例如:SELECT /*+ INDEX_DESC(BSEMPMS PK_BSEMPMS) */ FROM BSEMPMS WHERE DPT_NO='SCOTT';

18. /*+ INDEX_FFS(TABLE INDEX_NAME) */
對指定的表執行快速全索引掃描,而不是全表掃描的辦法.要求要檢索的列都在索引里, 如果表有很多列時特別適用該提示.
例如:SELECT /*+ INDEX_FFS(BSEMPMS IN_EMPNAM) */ * FROM BSEMPMS WHERE DPT_NO='TEC305';

19. /*+ NO_EXPAND */
對于WHERE后面的OR 或者IN-LIST的查詢語句,NO_EXPAND將阻止其基于優化器對其進行擴展, 縮短解析時間.
例如:SELECT /*+ NO_EXPAND */ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M';

20. /*+ DRIVING_SITE(TABLE) */
強制與ORACLE所選擇的位置不同的表進行查詢執行.特別適用于通過dblink連接的遠程表.
例如:SELECT /*+ DRIVING_SITE(DEPT) */ * FROM BSEMPMS,DEPT@BSDPTMS DEPT WHERE BSEMPMS.DPT_NO=DEPT.DPT_NO;

21. /*+ CACHE(TABLE) */ 和 /*+ NOCACHE(TABLE) */
當進行全表掃描時,CACHE提示能夠將表全部緩存到內存中,這樣訪問同一個表的用戶可直接在內存中查找數據. 比較適合數據量小但常被訪問的表, 也可以建表時指定cache選項這樣在第一次訪問時就可以對其緩存. NOCACHE則表示對已經指定了CACHE選項的表不進行緩存.
例如:SELECT /*+ FULL(BSEMPMS) CAHE(BSEMPMS) */ EMP_NAM FROM BSEMPMS;

22. /*+ PUSH_SUBQ */
當SQL里用到了子查詢且返回相對少的行時, 該提示可以盡可能早對子查詢進行評估從而改善性能, 不適用于合并連接或帶遠程表的連接.
例如:select /*+ PUSH_SUBQ */ emp.empno, emp.ename, itemno from emp, orders where emp.empno = orders.empno and emp.deptno = (select deptno from dept where loc='XXX');

23. /*+ INDEX_SS(TABLE INDEX1,INDEX2) */
指示對特定表的索引使用跳躍掃描, 即當組合索引的第一列不在where子句中時, 讓其使用該索引.

--End--
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩成人黄色| 日韩欧美高清在线视频| 日韩电影免费在线观看| 成人av.网址在线网站| 国产成人福利夜色影视| 欧美日韩国产精品一区二区三区四区| 欧美精品久久久久久久免费观看| 亚洲国产精品系列| 色婷婷综合久久久久中文字幕1| 欧美激情a在线| 成人久久久久爱| 中文字幕亚洲欧美一区二区三区| 国产成人精品a视频一区www| 日韩欧美国产视频| 久久久久久久久久久成人| 97国产精品视频人人做人人爱| 97香蕉久久超级碰碰高清版| 91精品国产乱码久久久久久蜜臀| 中文字幕日韩精品在线| 2018日韩中文字幕| 日韩av影院在线观看| 精品福利在线看| 久久久国产精品免费| 欧美成人三级视频网站| 人妖精品videosex性欧美| 日韩欧美国产骚| 国产精品自拍小视频| 亚洲男女性事视频| 欧美第一黄色网| 成人激情春色网| 亚洲丝袜在线视频| 1769国内精品视频在线播放| 国产精品高清免费在线观看| 欧美疯狂xxxx大交乱88av| 91免费人成网站在线观看18| 国产精品亚洲综合天堂夜夜| 国产精品爽爽爽爽爽爽在线观看| 日韩亚洲第一页| 午夜精品免费视频| 久久中文精品视频| 亚洲精品v欧美精品v日韩精品| 中文字幕亚洲欧美一区二区三区| 日韩大片免费观看视频播放| 久久精品视频亚洲| 国产精品欧美一区二区| 国产成人精品视频| 欧美激情亚洲视频| 国产精品久久久久福利| 国模gogo一区二区大胆私拍| 91久久精品美女| 国产精品美乳一区二区免费| 在线精品播放av| 成人免费看片视频| 欧美日韩美女视频| 久久伊人免费视频| 国产视频久久久久久久| 欧美性极品xxxx娇小| 亚洲视频电影图片偷拍一区| 欧亚精品中文字幕| 久久躁狠狠躁夜夜爽| 伊人激情综合网| 欧美网站在线观看| 国产精品69久久久久| 亚洲午夜未满十八勿入免费观看全集| 成人免费视频网址| 国产日韩av在线| 国产精品久久久久福利| 国产精品∨欧美精品v日韩精品| 九九精品在线播放| 欧美性高跟鞋xxxxhd| 精品福利视频导航| 国产精品视频免费在线观看| 久久夜色精品国产亚洲aⅴ| 国产精品视频男人的天堂| 亚洲天堂精品在线| 国产精品日韩欧美| 亚洲va欧美va国产综合久久| 精品精品国产国产自在线| 欧美日韩久久久久| 日韩最新中文字幕电影免费看| 久久久精品电影| 国产视频亚洲视频| 亚洲欧美日韩高清| 亚洲性69xxxbbb| 亚洲欧美日韩中文在线| 国产精品久久久久9999| 亚洲一区二区久久久| 国产在线一区二区三区| 欧美一区在线直播| 国产精品视频1区| 91亚洲国产成人精品性色| 欧美电影在线播放| 亚洲一区二区久久久久久| 欧美日韩成人在线视频| 欧美亚洲另类激情另类| 亚洲男人天堂网| 成人午夜小视频| 欧美成人精品xxx| 欧美成人午夜激情| 欧美激情一区二区三区成人| 国产综合色香蕉精品| 青青草国产精品一区二区| 日韩av综合中文字幕| 国产精品99免视看9| 国产成人精品免费久久久久| 国产精品福利无圣光在线一区| 日韩欧美在线播放| 日本中文字幕不卡免费| 亚洲一区亚洲二区亚洲三区| 亚洲精品小视频在线观看| 国产丝袜一区二区三区免费视频| 精品网站999www| 国产欧美一区二区三区在线| 欧美日韩国产第一页| 亚洲国产欧美一区二区丝袜黑人| 欧美激情综合色| 中文字幕成人精品久久不卡| 91美女福利视频高清| 日韩成人在线网站| 精品国偷自产在线视频99| 亚洲va国产va天堂va久久| 亚洲精品456在线播放狼人| 中文字幕欧美国内| 亚洲人成在线播放| 不卡毛片在线看| zzjj国产精品一区二区| 欧美日韩国产成人在线观看| 欧美性猛交xxxx富婆| 亚洲日本欧美中文幕| 亚洲国产精品一区二区三区| 伦理中文字幕亚洲| 成人午夜黄色影院| 成人淫片在线看| 色噜噜狠狠狠综合曰曰曰88av| 中文字幕久久久av一区| 亚洲成人黄色网址| 亚洲欧美一区二区三区久久| 亚洲色图18p| 色偷偷av亚洲男人的天堂| 福利精品视频在线| 91tv亚洲精品香蕉国产一区7ujn| 日本久久久久亚洲中字幕| 国产成人精品一区二区| 91精品国产91久久久久久不卡| 久久久欧美一区二区| 亚洲aa在线观看| 亚洲视频在线看| 中文欧美日本在线资源| 精品国产精品自拍| 黄色91在线观看| 欧美激情二区三区| 亚洲精品一区中文| 亚洲欧美成人精品| 97在线日本国产| 欧洲精品毛片网站| 亚洲一区二区三区在线视频| 成人有码在线视频| 日本欧美在线视频| 奇门遁甲1982国语版免费观看高清| 中文字幕日韩电影| 欧美精品做受xxx性少妇| 亚洲国产小视频| 亚洲欧美日本伦理| 欧美午夜视频一区二区|