oracle常見hint

n-lauren發表於2017-11-23
與優化器模式相關的hint
[plain] view plain copy
  1. 1.1 /*+ all_rows */ 讓優化器啟動CBO  
  2. 1.2 /*+ first_rows(n)*/優化器啟動CBO,選擇會快返回前n行資料的執行計劃。與first_rows_n不同,first_rows_n n只能為1,10,100,1000.  
  3. 1.3 /*+ rule */ 啟動RBO,與其他hint連用,其他hint一般會失效。  

與表及索引訪問相關的hint
  1. 2.1 full(xxx) 全表掃描  
  2. 2.2 index(目標表 目標索引1 目標索引2)   
  3. 2.3 no_index(目標表 目標索引1 目標索引2)   
  4. 2.4 index_desc(目標表 目標索引1 目標索引2) 讓優化器對目標索引執行降序掃描,如目標索引是降序,則hint則以升序掃描目標索引。  
  5. 2.5 index_ffs(目標表 目標索引1 目標索引2)  索引快速全掃描   

與表連線順序相關的hint
  1. 3.1 ordered 讓優化器在執行多表連線時,按照他們在sql中where條件出現順序進行連線。查詢轉換可能會導致這個hint失效。  
  2. 3.2 leading(表1 表2) 讓優化器將我們執行多個表的連線結果作為目標sql表連線過程中的結果集,並將hint中自左到右的第一個表,作為表連線的驅動表。  

與表連線方法相關的hint
  1. 4.1 use_merge(表1 表2) 讓優化器將我們指定的多個表作為被驅動表與其他表或結果集做排序合併連線。  
  2. 4.2 no_use_merge(表1 表2)  
  3. 4.3 use_nl(表1 表2) 讓優化器將我們指定的多個表作為被驅動表與其他表或結果集做巢狀迴圈連線。經常與leading合用。  
  4. /*+use_nl(s,X) leading X */  
  5. 4.4 no_use_merge(表1 表2)  
  6. 4.5 use_hash(表1 表2) 讓優化器將我們指定的多個表作為被驅動表與其他表或結果集做雜湊連線。經常與leading合用。  
  7. 4.6 no_use_merge(表1 表2)  
  8. 4.7 merge_aj 針對子查詢的hint,讓優化器對目標表執行排序合併反連線。  
  9. 4.8 nl_aj 針對子查詢的hint,讓優化器對目標表執行巢狀迴圈反連線。  
  10. 4.9 hash_aj 針對子查詢的hint,讓優化器對目標表執行雜湊反連線。  
  11. 4.10 merge_sj 針對子查詢的hint,讓優化器對目標表執行排序合併半連線。  
  12. 4.11 nl_sj 針對子查詢的hint,讓優化器對目標表執行巢狀迴圈半連線。  
  13. 4.12 hash_sj 針對子查詢的hint,讓優化器對目標表執行雜湊半連線  

與查詢轉換相關的hint
  1. 5.1 use_concat 是針對目標sql的hint,讓優化器對目標sql使用in_list擴充套件或or_list擴充套件。  
  2. 5.2 no_expand 是use_concat反義hint,不讓優化器對目標sql使用in_list擴充套件或or_list擴充套件。  
  3. 5.3 merge 是針對單個目標檢視的hint,讓優化器對目標檢視執行檢視合併(view merging)  
  4. 5.4 no_merge 是針對merge的反義hint,不讓優化器對目標檢視執行檢視合併(view merging)  
  5. 5.5 unnest 是針對子查詢的hint,讓優化器對目標sql中的子查詢展開(subquery unnesting)  
  6. 5.6 no_unnest 是針對unnest反義的hint,不讓優化器對目標sql中的子查詢展開(subquery unnesting)  
  7. 5.7 expand_table(表) 讓優化器在不考慮成本的情況下,對錶進行表擴充套件  
  8. 5.8 no_expand_table(表) expand_table(表)的反義hint,不對錶進行表擴充套件  

與並行有關的hint
  1. 6.1 parallel 並行  
  2. 6.2 no_parallel 針對整個目標sql的hint  
  3. 6.3 parallel_index(表 index-1 index-2 ... index-n n n n )  
  4. 6.4 no_parallel_index(表 index-1 index-2 ... index-n)  

其他常見hint
  1. 7.1 driving_site 讓優化器在我們指定目標表所在的節點上執行目標sql。只適用於帶dblink的分散式查詢語句。  
  2. 7.2 append 讓優化器執行帶子查詢的insert時,繞開buffer cache,使用直接路徑插入。  
  3. 7.3 append_values 讓優化器執行帶values的insert時,繞開buffer cache,使用直接路徑插入。(11R2)  
  4. 7.4 push_pred 針對目標檢視的hint,讓優化器對目標檢視執行連線謂詞推入。  
  5. 7.5 no_push_pred 針對目標檢視的hint,不讓優化器對目標檢視執行連線謂詞推入。  
  6. 7.6 push_subq 針對子查詢的hint,讓優化器儘早執行目標sql中不能做子查詢展開的子查詢。  
  7. 7.7 no_push_subq 針對子查詢的hint,讓優化器最後執行目標sql中不能做子查詢展開的子查詢。  
  8. 7.8 opt_param 針對目標sql的hint,用來修改針對目標sql比系統級,session級更細顆粒的更改。  
  9. 7.9 optimizer_features_enable('優化器版本號') 更改優化器版本  
  10. 7.10 qb_name 對一個查詢塊指定自定義的名稱。  
  11. 7.11 cardinality 針對單個目標表的hint,用來設定對目標表執行掃描操作後的cardinality的值。(對唯一索引掃描無效)  
  12. 7.12 swap_join_inputs 針對hash連線的hint,讓優化器交換原hash連線的驅動表和被驅動表順序。  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22990797/viewspace-2147685/,如需轉載,請註明出處,否則將追究法律責任。

相關文章