教你快速掌握Oracle中“HINT”的30个用法

Oracle hint 經典用法30例

 

1. /*+ALL_ROWS*/

  表明對語句塊選擇基於開銷的優化方法,並獲得最佳輸送量,使資源消耗最小化.

  例如:

  SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';

  2. /*+FIRST_ROWS*/

  表明對語句塊選擇基於開銷的優化方法,並獲得最佳回應時間,使資源消耗最小化.

  例如:

  SELECT /*+FIRST_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';

  3. /*+CHOOSE*/

  表明如果資料字典中有訪問表的統計資訊,將基於開銷的優化方法,並獲得最佳的輸送量;

  表明如果資料字典中沒有訪問表的統計資訊,將基於規則開銷的優化方法;

  例如:

  SELECT /*+CHOOSE*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';

  4. /*+RULE*/

  表明對語句塊選擇基於規則的優化方法.

  例如:

  SELECT /*+ RULE */ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';

  5. /*+FULL(TABLE)*/

  表明對表選擇全域掃描的方法.

  例如:

  SELECT /*+FULL(A)*/ EMP_NO,EMP_NAM FROM BSEMPMS A WHERE EMP_NO='SCOTT';

  6. /*+ROWID(TABLE)*/

  提示明確表明對指定表根據ROWID進行訪問.

  例如:

  SELECT /*+ROWID(BSEMPMS)*/ * FROM BSEMPMS WHERE ROWID>='AAAAAAAAAAAAAA'

  AND EMP_NO='SCOTT';

  7. /*+CLUSTER(TABLE)*/

  提示明確表明對指定表選擇簇掃描的存取方法,它只對簇物件有效.

  例如:

  SELECT /*+CLUSTER */ BSEMPMS.EMP_NO,DPT_NO FROM BSEMPMS,BSDPTMS

  WHERE DPT_NO='TEC304' AND BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

  8. /*+INDEX(TABLE INDEX_NAME)*/

  表明對表選擇索引的掃描方法.

  例如:

  SELECT /*+INDEX(BSEMPMS SEX_INDEX) USE SEX_INDEX BECAUSE THERE ARE FEWMALE BSEMPMS */ FROM BSEMPMS WHERE SEX='M';

  9. /*+INDEX_ASC(TABLE INDEX_NAME)*/

  表明對表選擇索引昇冪的掃描方法.

  例如:

  SELECT /*+INDEX_ASC(BSEMPMS PK_BSEMPMS) */ FROM BSEMPMS WHERE DPT_NO='SCOTT';

  10. /*+INDEX_COMBINE*/

  為指定表選擇點陣圖訪問路經,如果INDEX_COMBINE中沒有提供作為參數的索引,將選擇出點陣圖索引的布林組合方式.

  例如:

  SELECT /*+INDEX_COMBINE(BSEMPMS SAL_BMI HIREDATE_BMI)*/ * FROM BSEMPMS

  WHERE SAL<5000000 AND HIREDATE

  11. /*+INDEX_JOIN(TABLE INDEX_NAME)*/

  提示明確命令優化器使用索引作為訪問路徑.

  例如:

  SELECT /*+INDEX_JOIN(BSEMPMS SAL_HMI HIREDATE_BMI)*/ SAL,HIREDATE

  FROM BSEMPMS WHERE SAL<60000;

  12. /*+INDEX_DESC(TABLE INDEX_NAME)*/

  表明對表選擇索引降冪的掃描方法.

  例如:

  SELECT /*+INDEX_DESC(BSEMPMS PK_BSEMPMS) */ FROM BSEMPMS WHERE DPT_NO='SCOTT';

  13. /*+INDEX_FFS(TABLE INDEX_NAME)*/

  對指定的表執行快速全索引掃描,而不是全資料表掃描的辦法.

  例如:

  SELECT /*+INDEX_FFS(BSEMPMS IN_EMPNAM)*/ * FROM BSEMPMS WHERE DPT_NO='TEC305';

  14. /*+ADD_EQUAL TABLE INDEX_NAM1,INDEX_NAM2,...*/

  提示明確進行執行規劃的選擇,將幾個單列索引的掃描合起來.

  例如:

  SELECT /*+INDEX_FFS(BSEMPMS IN_DPTNO,IN_EMPNO,IN_SEX)*/ * FROM BSEMPMS WHERE EMP_NO='SCOTT' AND DPT_NO='TDC306';

  15. /*+USE_CONCAT*/

  對查詢中的WHERE後面的OR條件進行轉換為UNION ALL的組合查詢.

  例如:

  SELECT /*+USE_CONCAT*/ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M';

  16. /*+NO_EXPAND*/

  對於WHERE後面的OR 或者IN-LIST的查詢語句,NO_EXPAND將阻止其基於優化器對其進行擴展.

  例如:

  SELECT /*+NO_EXPAND*/ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M';

  17. /*+NOWRITE*/

  禁止對查詢塊的查詢重寫操作.

  18. /*+REWRITE*/

  可以將視圖作為參數.

  19. /*+MERGE(TABLE)*/

  能夠對視圖的各個查詢進行相應的合併

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/92530/viewspace-504679/,如需转载,请注明出处,否则将追究法律责任。

user_pic_default.png
请登录后发表评论 登录
全部评论
<%=items[i].createtime%>

<%=items[i].content%>

<%if(items[i].items.items.length) { %>
<%for(var j=0;j
<%=items[i].items.items[j].createtime%> 回复

<%=items[i].items.items[j].username%>   回复   <%=items[i].items.items[j].tousername%><%=items[i].items.items[j].content%>

<%}%> <%if(items[i].items.total > 5) { %>
还有<%=items[i].items.total-5%>条评论 ) data-count=1 data-flag=true>点击查看
<%}%>
<%}%>
<%}%>

转载于:http://blog.itpub.net/92530/viewspace-504679/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值