打印本文 打印本文 关闭窗口 关闭窗口
Oracle常見問題集(三)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数6580  更新时间:2009/4/22 22:05:50  文章录入:mintao  责任编辑:mintao
SELECT /*+INDEX_COMBINE(BSEMPMS SAL_BMI HIREDATE_BMI)*/ * FROM

BSEMPMS

WHERE SAL<5000000 AND HIREDATE<SYSDATE;< SPAN>

 

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

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

例如:

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

FROM BSEMPMS WHERE SAL<60000;

 

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

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

例如:

SELECT /*+INDEX_DESC(BSEMPMS PK_BSEMPMS) */ FROM BSEMPMS WHERE

DPT_NO=''''CCBZZP'''';

 

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

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

例如:

SELECT /*+INDEX_FFS(BSEMPMS IN_EMPNAM)*/ * FROM BSEMPMS WHERE

DPT_NO=''''TEC305'''';

 

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

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

例如:

SELECT /*+INDEX_FFS(BSEMPMS IN_DPTNO,IN_EMPNO,IN_SEX)*/ * FROM

BSEMPMS WHERE EMP_NO=''''CCBZZP'''' AND DPT_NO=''''TDC306'''';

 

188. /*+USE_CONCAT*/

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

例如:

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

SEX=''''M'''';

189. /*+NO_EXPAND*/

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

例如:

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

SEX=''''M'''';

 

190. /*+NOWRITE*/

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

 

191. /*+REWRITE*/

可以將視圖作爲參數.

 

192. /*+MERGE(TABLE)*/

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

例如:

SELECT /*+MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A

(SELET DPT_NO

,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE

A.DPT_NO=V.DPT_NO

AND A.SAL>V.AVG_SAL;

 

193. /*+NO_MERGE(TABLE)*/

對於有可合併的視圖不再合併.

例如:

SELECT /*+NO_MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS

A (SELET DPT_NO

,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE

A.DPT_NO=V.DPT_NO

AND A.SAL>V.AVG_SAL;

 

194. /*+ORDERED*/

根據表出現在FROM中的順序,ORDERED使ORACLE依此順序對其連接.

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ...  下一页 >> 

打印本文 打印本文 关闭窗口 关闭窗口