共計(jì) 2849 個(gè)字符,預(yù)計(jì)需要花費(fèi) 8 分鐘才能閱讀完成。
oracle 常用 hint 是怎樣的,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面丸趣 TV 小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
1./*+ ALL_ROWS */
希望優(yōu)化程序給出一種盡快得到全部記錄的執(zhí)行計(jì)劃,目標(biāo)是增加系統(tǒng)的吞吐量。
2./*+ FIRST_ROWS(n) */
希望優(yōu)化程序給出一種可以迅速的得到第一行的執(zhí)行計(jì)劃,目標(biāo)是減少系統(tǒng)的響應(yīng)時(shí)間。
3./*+ FULL(TABLE)*/
表明對(duì)表選擇全局掃描的方法.
4./*+ INDEX(TABLE INDEX_NAME) */
表明對(duì)表選擇索引的掃描方法.
5./*+ INDEX_ASC(TABLE INDEX_NAME)*/
表明對(duì)表選擇索引升序的掃描方法.
6./*+ INDEX_DESC(TABLE INDEX_NAME)*/
表明對(duì)表選擇索引降序的掃描方法.
7./*+ INDEX_COMBINE*/
從索引中取得 ROWID 信息,通過(guò) BITMAP CONVERSION FROM ROWIDS 轉(zhuǎn)換成位圖,再通過(guò) BITMAP AND 把多個(gè)位圖信息
組合并匹配,得到的位圖信息再經(jīng)過(guò) BITMAP CONVERSION TO ROWIDS 轉(zhuǎn)換成 ROWID,然后訪(fǎng)問(wèn)表或者直接返回?cái)?shù)據(jù)。
8./*+ INDEX_JOIN(TABLE INDEX_NAME1 INDEX_NAME2) */
index_join 的工作原理:
index_join 的前提條件是查詢(xún)的數(shù)據(jù)都可以用索引中得到,Oracle 通過(guò) hash index join 方式對(duì)索引
數(shù)據(jù)進(jìn)行處理并直接返回,從而避免了對(duì)表的訪(fǎng)問(wèn)。index_join 使用的索引可以是唯一索引,也可以是多列索引。
index_join 的限制條件:
1. 查詢(xún)的數(shù)據(jù)都可以用索引中得到。
2. 謂詞條件中不能存在非索引列的謂詞
9. /*+ INDEX_FFS(TABLE INDEX_NAME) */
index fast full scan 使用多塊讀的方式讀取索引塊,產(chǎn)生 db file scattered reads 事件,讀取時(shí)高效,但為無(wú)序讀取。
index full scan 使用單塊讀方式有序讀取索引塊,產(chǎn)生 db file sequential reads 事件,當(dāng)采用該方式讀取大量索引全掃描,效率低下
10./*+ INDEX_SS(T T_IND) */
從 9i 開(kāi)始,oracle 引入了這種索引訪(fǎng)問(wèn)方式。當(dāng)在一個(gè)聯(lián)合索引中,某些謂詞條件并不在聯(lián)合索引的第一列時(shí),可以通過(guò) Index Skip Scan 來(lái)訪(fǎng)問(wèn)索引獲得數(shù)據(jù)。當(dāng)聯(lián)合索引第一列的唯一值個(gè)數(shù)很少時(shí),使用這種方式比全表掃描效率高。
11./*+ leading(table_1,table_2) */
在多表關(guān)聯(lián)查詢(xún)中,指定哪個(gè)表作為驅(qū)動(dòng)表,即告訴優(yōu)化器首先要訪(fǎng)問(wèn)哪個(gè)表上的數(shù)據(jù)。
12./*+ ordered */
讓 Oracle 根據(jù) from 后面表的順序來(lái)選擇驅(qū)動(dòng)表,oracle 建議使用 leading,他更為靈活
13. /*+ use_nl(table_1,table_2) */
在多表關(guān)聯(lián)查詢(xún)中,指定使用 nest loops 方式進(jìn)行多表關(guān)聯(lián)。
14. /*+ use_hash(table_1,table_2) */
在多表關(guān)聯(lián)查詢(xún)中,指定使用 hash join 方式進(jìn)行多表關(guān)聯(lián)。
15./*+ use_merge(table_1,table_2) */
在多表關(guān)聯(lián)查詢(xún)中,指定使用 merge join 方式進(jìn)行多表關(guān)聯(lián).
16./*+ parallel(table_name n) */
在 sql 中指定執(zhí)行的并行度,這個(gè)值將會(huì)覆蓋自身的并行度
17./*+ no_parallel(table_name) */
在 sql 中指定執(zhí)行的不使用并行
18./*+ append */
以直接加載的方式將數(shù)據(jù)加載入庫(kù)
19./*+ dynamic_sampling(table_name n) */
設(shè)置 sql 執(zhí)行時(shí)動(dòng)態(tài)采用的級(jí)別,這個(gè)級(jí)別為 0~10
20./*+ cache(table_name) */
進(jìn)行全表掃描時(shí)將 table 置于 LRU 列表的最活躍端,類(lèi)似于 table 的 cache 屬性
21. /*+ HASH_SJ */ /*+ HASH_AJ */
通常使用在 Exists,in 子查詢(xún)中
22. /*+ use_concat */ /*+no_expand*/
or 的擴(kuò)展和不擴(kuò)展
23./*+NOWRITE*/
禁止對(duì)查詢(xún)塊的查詢(xún)重寫(xiě)操作.
/*+REWRITE*/
按物化視圖對(duì)語(yǔ)句進(jìn)行重寫(xiě)
24. /*+MERGE(TABLE)*/ /*+NO_MERGE(TABLE)*/
能夠?qū)σ晥D的各個(gè)查詢(xún)進(jìn)行相應(yīng)的合并.
25. UNNEST 和 NO_UNNEST
強(qiáng)制 Oracle 將子查詢(xún)和主查詢(xún)合并
26.NO_QUERY_TRANSFORMATION
跳過(guò)所有查詢(xún)轉(zhuǎn)換,包括 OR 操作轉(zhuǎn)換、視圖合并、子查詢(xún)和主查詢(xún)合并、星型轉(zhuǎn)換、物化視圖語(yǔ)句重寫(xiě)等。
27./*+push_subq(@tmp)*/ /*+QB_Name(tmp)*/
那么 push_subq 就是為了讓子查詢(xún)最先進(jìn)行 join。
select /*+push_subq(@tmp)*/ hao1.object_name from
hao1,hao2,hao4
where hao1.object_name like %a%
and hao1.object_id+hao2.object_id 50
and hao4.object_type=hao1.object_type
and 11 in
(SELECT /*+QB_Name(tmp)*/ hao3.object_id FROM hao3 WHERE hao1.object_id = hao3.object_id);
28./*+push_pred(haoview)*/
接著,我們來(lái)使用這里的 hint push_pred 強(qiáng)制優(yōu)化器將謂詞 merge 進(jìn) view 中,可見(jiàn)到“VIEW PUSHED PREDICATE”:
select /*+push_pred(haoview)*/ hao3.object_name
from hao3,haoview
where hao3.object_name=haoview.object_name(+)
and hao3.object_id=999;
29. /*+ pq_distribute */
提示通常被用于提升數(shù)據(jù)倉(cāng)庫(kù)中分區(qū)表間的連接操作性能。
30. CURSOR_SHARING_EXACT
阻止 Oracle 將 SQL 語(yǔ)句中的常量替換為綁定變量.
31.DRIVING_SITE
強(qiáng)制 Oracle 在 SQL 語(yǔ)句發(fā)起的另外一個(gè)節(jié)點(diǎn)上執(zhí)行
32.DYNAMIC_SAMPLING
強(qiáng)制 Oracle 進(jìn)行動(dòng)態(tài)統(tǒng)計(jì)數(shù)據(jù)采樣,采樣率參數(shù)為 0 到 10,值越大,動(dòng)態(tài)采樣數(shù)據(jù)越多。
33.RESULT_CACHE NO_RESULT_CACHE
強(qiáng)制 Oracle 將當(dāng)前查詢(xún)結(jié)果集緩存在 RESULT CACHE 中
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝您對(duì)丸趣 TV 的支持。