1. 程式人生 > >6.4常見的Hint《基於Oracle的優化(學習筆記)》

6.4常見的Hint《基於Oracle的優化(學習筆記)》

與優化器相關的Hint

/*+ ALL_ROWS */

它的含義是啟用CBO

/*+ FIRST_ROWS(n) */

優化器啟用CBO,而且依據返回頭n條的記錄的響應時間來決定SQL的執行計劃。

注意,first_rows(n)與first_rows_n並不是一一對應的

/*+ RULE */

如果目標SQL使用了並行執行,就意味著其中的RULE Hint會失效,此時Oracle會自動啟用CBO。

如果目標SQL所涉及的物件有分割槽表,就意味著目標SQL中的RULE Hint會失效,此時Oracle會自動啟用CBO。

如果目標SQL所涉及的物件有IOT(Index Organization Table

)表,就意味著SQL中的RULE Hint會失效,此時Oracle會自動啟用CBO。

與訪問相關的Hint

/*+ FULL(目標表) */

全表掃描,而不考慮目標表的索引

/*+ ROWID(目標表) */

它的含義是讓優化器對目標表執行ROWID掃描。

與索引訪問相關的Hint

/*+ INDEX(目標表 索引) */

/*+ INDEX(目標表 索引1 索引2 ......索引n) */

/*+ INDEX(目標表 (索引1的索引列名)(索引2的索引列名)........(索引n的索引列名) )

/*+ INDEX(目標表) */

/*+ NO_INDEX(目標表 索引)*/

/*+ NO_INDEX(目標表 索引1 索引2......索引n) */

/*+ NO_INDEX(目標表) */

/*+ INDEX_DESC(目標表 索引) */

/*+ INDEX_DESC(目標表 索引1 索引2 ...... 索引n) */

/*+ INDEX_DESC(目標表) */

/*+ INDEX_COMBINE(目標表 索引1 索引2 ...... 索引n) */

/*+ INDEX_COMBINE(目標表) */

/*+ INDEX_FFS(目標表 索引) */

/*+ INDEX_FFS(目標表 索引1 索引2 ....... 索引n) */

/* INDEX_FFS(目標表) */

/*+ INDEX_JOIN(目標表 索引1 索引2 ...... 索引n) */

/*+ INDEX_JOIN(目標表) */

/*+ AND_EQUAL(目標表 索引1 索引2 ...... 索引n) */

與表連線相關的Hint

/*+ ORDERED */

/*+ LEADING(目標表1 目標表2 目標表3 ...... 目標表n)  */

與表連線方法相關的Hint

/*+ USE_MERGE(目標表1 目標表2 ....目標表n) */

/*+ USE_MERGE(目標表1,目標表2, ....目標表n) */

/*+ NO_USE_MERGE(目標表1 目標表2 目標表3 ...... 目標表n) */

/*+ NO_USE_MERGE(目標表1,目標表2,目標表3,....... 目標表n) */

/*+ USE_NL(目標表1 目標表2 目標表3 ...... 目標表n) */

/*+ USE_NL(目標表1,目標表2,目標表3, ....... 目標表n) */

/*+ NO_USE_NL(目標表1 目標表2 目標表3 ...... 目標表n) */

/*+ NO_USE_NL(目標表1,目標表2,目標表3, ....... 目標表n) */

/*+ USE_HASH(目標表1 目標表2 目標表3 ...... 目標表n) */

/*+ USE_HASH(目標表1,目標表2,目標表3, ....... 目標表n) */

/*+ NO_USE_HASH(目標表1 目標表2 目標表3 ...... 目標表n) */

/*+ NO_USE_HASH(目標表1,目標表2,目標表3, ....... 目標表n) */

/* MERGE_AJ */

/*+ NL_AJ */

/*+HASH_AJ */

/*+ MERGE_SJ */

/*+ NL_SJ */

/*+ HASH_SJ */

與查詢轉換相關的Hint

/*+ USE_CONCAT */

/*+ NO_EXPAND */

/*+ MERGE(目標檢視) */

/*+ NO_MERGE(目標檢視) */

/*+ UNNEST */

/*+ NO_UNNEST */

/*+ EXPAND_TABLE */

/*+ NO_EXPAND_TABLE */

與並行相關的Hint

/*+ PARALLEL */

/* PARALLEL(AUTO) */

/* PARALLEL(MANUAL) */

/* PARALLEL(指定的並行度) */

/*+ PARALLEL(目標表 指定的並行度) */

/*+ PARALLEL(目標表 default) */

/*+ NO_PARALLEL */

/*+ NO_PARALLEL(目標表) */

/*+ PARALLEL_INDEX(目標表 目標分割槽索引 指定的並行度) */

/*+ PARALLEL_INDEX(目標表 目標分割槽索引 default) */

/*+ PARALLEL_INDEX(目標表 目標分割槽索引1 目標表分割槽索引2 ...... 目標分割槽索引n 目標分割槽索引1的並行度 目標分割槽索引2的並行度....目標分割槽索引n的並行度) */

/*+ PARALLEL_INDEX(目標表 目標分割槽索引1 目標表分割槽索引2 ...... 目標分割槽索引n  default default ...... default) */

/*+ PARALLEL_INDEX(目標表) */

/*+ NO_PARALLEL_INDEX(目標表 目標分割槽索引) */

/*+ NO_PARALLEL_INDEX(目標表 目標分割槽索引1 目標分割槽索引2 .... 目標分割槽索引n) */

/*+ NO_PARALLEL_INDEX(目標表) */

其他常見的Hint

/* DRIVING_SITE(目標表) */

/*+ APPEND */

/*+ APPEND_VALUES */

/*+ PUSH_PRED */

/*+ NO_PUSH_PRED */

/*+ PUSH_SUBQ */

/*+ NO_PUSH_SUBQ */

/*+ OPT_PARAM(引數名稱 引數值) */

/*+ OPTIMIZER_FEATURES_ENABLE(優化器版本號) */

/*+ QB_NAME(自定義的Query Block名稱) */

/*+ CARDINALITY(目標表 掃描結果集cardinality的值) */

/*+ SWAP_JOIN_INPUTS(原雜湊連線的驅動表) */