说明
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 名 |
功能概述 |
举例 |
|
/*+ disable_parallel_dml */ |
该hint使得DELETE、INSERT、MERGE和UPDATE类型的语句禁用并行DML。 意思是当使用ALTER SESSION ENABLE PARALLEL DML语句为session启用并行DML时,可以使用此hint会对单个SQL语句禁用并行DML |
|
|
/*+ result_cache */ |
该hint目的是让数据库将当前查询或查询片段的结果缓存在内存中,然后在以后执行查询或查询片段时使用缓存的结果。缓存的结果保留在在共享池的result cache中 |
|
|
/*+ no_result_cache */ |
如果参数RESULT_CACHE_MODE设置为“FORCE”,则优化器会将查询结果缓存在result cache中。因此在这种情况下,该hint会禁止当前查询缓存在result cache中 |
|
|
/*+ dynamic_sampling(tab n) */ |
该hint让优化器采用动态采样的方式来去统计数据。N的范围是0-10,数字越大统计越精准,由于动态采样的优先级低于统计信息收集这种方式,所以 如果已经对表收集了统计信息,则该hint将不会生效 |
SELECT /*+ DYNAMIC_SAMPLING(e 1) */ count(*) FROM emp e; |
|
/*+ fresh_mv */ |
该hint适用于查询实时物化图时生效。 该hint让优化器使用查询计算来从物化视图中获取最新数据,即使物化视图已过时。在查询不是实时物化视图的对象的SELECT语句以及所有UPDATE、INSERT、MERGE和DELETE语句块中,优化器都会忽略该hint |
|
|
/*+ cardinality(tab n) */ |
该hint让优化器按照指定n的大小来设置查询结果集的cardinality(基数)。适用于full scan(全表扫描),index range scan(索引范围扫描),index full scan(索引全扫描)和index fast full scan(索引快速全扫描)这四种扫描方式 |
|
|
/*+ native_full_outer_join */ |
该hint让优化器使用本native full外连接的方式,这是一种基于哈希联接的本地执行方法 |
|
|
/*+ gather_plan_statistics */ |
该hint让优化器在以下两种情况去额外收集一些统计信息:1.CTAS(create table as select)2.insert into select --子查询的表必须为空表 |
|
|
/*+ monitor */ |
该hint让优化启用SQL的实时监控功能,即使该SQL语句很长时间没有运行,该hint依然会强制对查询进行实时SQL监视。仅当参数CONTROL_MANAGEMENT_PACK_ACCESS设置为DIAGNOSTIC + TUNING时,该hint才有效 |
|
|
/*+ no_monitor */ |
该hint让优化器禁用查询的实时SQL监视,即使SQL查询在长时间运行也不会监控 |
