【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(四)

Attack_on_Jager發表於2021-02-14

說明 

1.整理了一些本人平時SQL 調優中常用到的一些Hint,方便大家參考

2.Hint相關文章地址:

Oracle Hint之概念與用法: http://blog.itpub.net/69992972/viewspace-2756965/

Oracle Hint之常用Hint功能概述(一): http://blog.itpub.net/69992972/viewspace-2757087/

Oracle Hint之常用Hint功能概述(二): http://blog.itpub.net/69992972/viewspace-2757182/

Oracle Hint之常用Hint功能概述(三): http://blog.itpub.net/69992972/viewspace-2757238/

Oracle Hint之常用Hint功能概述(四): http://blog.itpub.net/69992972/viewspace-2757242/

Oracle Hint之常用Hint功能概述(五): http://blog.itpub.net/69992972/viewspace-2757273/


未分類Hint(其一)

Hint

功能概述

舉例

/*+ append */

該hint讓最佳化器將直接路徑(Direct-path)INSERT與INSERT語句的子查詢語法一起使用來插入資料( 僅針對insert語句中有子查詢而不使用values關鍵字有效)。

注意:

1.常規INSERT是序列模式下的預設設定。在序列模式下,僅當包含APPEND HINT時才能使用直接路徑

2.在並行模式下,預設為直接路徑INSERT。 在並行模式下,僅當指定NOAPPEND HINT時,才能使用常規插入

3.INSERT是否會被並行執行的決定與APPEND HINT無關

4.在直接路徑INSERT中,資料被附加到表的末尾,而不是使用當前分配給表的現有空間。結果就是直接路徑INSERT可能比常規INSERT快得多

5. 僅INSERT語句的子查詢語法支援APPEND HINT,而不支援VALUES子句。 如果使用VALUES子句指定APPEND HINT,則將其忽略並使用常規插入


/*+ append_values   */

該hint讓最佳化器將直接路徑INSERT與VALUES子句一起使用( 僅針對insert語句中有values關鍵字有效)。如果未指定此hint,則使用常規INSERT

注意:

1.在直接路徑INSERT中,資料被附加到表的末尾,而不是使用當前分配給表的現有空間。結果,直接路徑INSERT可能比常規INSERT快得多

2.該HINT可在下面的兩個情況下大大提高效能:

(1)在Oracle Call   Interface(OCI)程式中,當使用大型陣列繫結或帶有行回撥的陣列繫結時

(2)在PL / SQL中,當使用帶有帶有VALUES子句的INSERT語句的FORALL迴圈載入大量行時

3. 僅INSERT語句的VALUES子句支援APPEND_VALUES HINT。如果使用INSERT語句的子查詢語法指定APPEND_VALUES HINT,則將其忽略,並將使用常規插入


/*+ noappend */

該hint透過在INSERT語句的持續時間內禁用並行模式來讓最佳化器使用常規INSERT。APPEND HINT有提到:常規INSERT是序列模式下的預設設定,而直接路徑INSERT是並行模式下的預設設定


/*+ cache(tab) */

該hint讓最佳化器在執行全表掃描時將為表檢索的塊放在LRU列表中最近使用的緩衝區快取中。所以該hint對於小型查詢表很有用

SELECT /*+ FULL (e) CACHE(e) */ last_name   FROM emp e;

/*+ nocache(tab)   */

該hint讓最佳化器在執行全表掃描時將為表檢索的塊放在LRU列表中最近最少使用的緩衝區快取中。 這是緩衝區快取記憶體中塊的預設方式

SELECT /*+ FULL   (e) NOCACHE(e) */ last_name FROM emp e;

/*+ clustering */

該hint僅對啟用了attribute   clustering的表上的INSERT和MERGE操作有效。該hint為直接路徑插入(序列或並行)。該hint會覆蓋建立或更改表的DDL中的“NO ON LOAD”設定。該hint對未啟用attribute clustering的表沒有影響


/*+ no_clustering   */

和CLUSTERING HINT一樣,該hint僅對啟用了attribute clustering的表上的INSERT和MERGE操作有效。但該hint禁用直接路徑插入(序列或並行)的屬性聚類。該hint將覆蓋在建立或更改表的DDL中的“YES ON LOAD”設定。該hint對未啟用attribute clustering的表沒有影響


/*+   cursor_sharing_exact */

一般在安全的情況下,Oracle可以使用繫結變數替換SQL語句中的常量。此替換由CURSOR_SHARING初始化引數控制。但該hint讓最佳化器關閉此行為。當指定此提示時,Oracle會執行SQL語句,而不會嘗試用繫結變數替換常量



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

相關文章