说明
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语句,而不会尝试用绑定变量替换常量 |
