oracle的Hint
与优化器模式相关的Hint
1 ALl_ROWS 让优化器启用CBO
/*+ all_rows */
2 first_rows(n) 让优化器启用CBO 模式,而且得到目标sql的执行计划是会选择那些能以最快时间返回n条记录的执行路径
/*+ first_rows */
3 rule 启用RBO
/*+ rule */
与表访问相关
1 /*+ full */ 对目标表执行全表扫描
2 /*+ rowid(tablename) */ 针对单个表的HInt,他的含义是让优化器执行rowid 扫描,只有目标sql中使用了含rowid的where 条件时,rowid hint 才有意义。
与索引访问相关的hint
1 index 对目标表上的目标执行索引扫描操作
/* index (表名 目标索引(可多个)) */
/* index (表名) */
/* index (表名 目标索引对应的列名(可多个)) */
2 no_index 与index 相反
/* no_index (表名 目标索引(可多个)) */
/* no_index (表名) */
3 index_desc 执行索引时,降序扫描
/* index_desc (表名 目标索引(可多个)) */
/* index_desc (表名) */
4 index_combine 对目标表上的多个目标索引执行位图布尔运算
/* index_combine (表名 目标索引(可多个)) */
/* index_combine (表名) */
5 /*+ index_join(表名 目标索引(可多个)) */
/*+ index_join(表名) */
前提条件: select的所有查询列都存在目标表的多个目标索引中
6 and_equal 对目标表的多个目标索引执行 index_merge操作
/*+ and_equal(表名 目标索引(可多个)) */
/*+ and_equal(表名) */
与表连接顺序相关的hint
1 ordered 针对多个目标表,让优化器对多个目标表执行表连接操作时,按照sql的from字句中出现的顺序从左到右依次进行连接
/*+ ordered */
2 leading 针对多个目标表,让优化器将指定的多个表的连接结果作为目标sql表连接过程中的驱动结果集,并且将leading hint 中从左到右出现的第一个目标表作为整个表连接的首个驱动表
/*+ leading(表1 表2 表n) */
与表连接方法相关的Hint
1 use_merge 针对多个目标表,让优化器将我们指定的多个表作为被驱动表与其他表或结果集做排序合并连接
/*+ use_merge(表1 表2 表n) */
/*+ use_merge(表1,表2,...,表n) */
2 no_use_merge 针对多个目标表,不让优化器将我们指定的多个表作为被驱动表与其他表或结果集做排序合并连接
/*+ no_use_merge(表1 表2 表n) */
/*+ no_use_merge(表1,表2,...,表n) */
3 use_nl 针对多个目标表,让优化器将我们指定的多个表作为被驱动表与其他表或结果集做嵌套循环连接
/*+ use_nl(表1 表2 表n) */
/*+ use_nl(表1,表2,...,表n) */
4 no_use_nl 针对多个目标表,不让优化器将我们指定的多个表作为被驱动表与其他表或结果集做嵌套循环连接
/*+ no_use_nl(表1 表2 表n) */
/*+ no_use_nl(表1,表2,...,表n) */
5 use_hash 针对多个目标表,让优化器将我们指定的多个表作为被驱动表与其他表或结果集做哈希连接
/*+ use_hash(表1 表2 表n) */
/*+ use_hash(表1,表2,...,表n) */
6 no_use_hash 针对多个目标表,不让优化器将我们指定的多个表作为被驱动表与其他表或结果集做哈希连接
/*+ no_use_hash(表1 表2 表n) */
/*+ no_use_hash(表1,表2,...,表n) */
7 merge_aj 针对子查询,让优化器对相关目标表执行排序合并反连接
/*+ merge_aj */
8 nl_aj 针对子查询,让优化器对相关目标表执行嵌套循环反连接
/*+ nl_aj */
9 hash_aj 针对子查询,让优化器对相关目标表执行哈希反连接
/*+ hash_aj */
10 merge_sj 针对子查询,让优化器对相关目标表执行排序合并半连接
/*+ merge_sj */
11 nl_sj 针对子查询,让优化器对相关目标表执行嵌套循环半连接
/*+ nl_sj */
12 hash_sj 针对子查询,让优化器对相关目标表执行哈希半连接
/*+ hash_sj */
与查询转换相关的hint
1 use_concat 针对整个SQL的hint ,让优化器对目标sql使用IN_LIST 扩展(IN_List exception )或OR扩展(OR Exception )
/*+ use_concat */
2 no_expand 针对整个SQL的hint ,use_concat 的反义hint
/*+ no_expand */
3 merge 针对单个目标视图的hint,让优化器对目标视图执行视图合并(view merging)
/*+ merge(目标视图) */
如果是内嵌视图,此时的hint不要出现视图名
4 no_merge 针对单个目标视图的hint,是 merge的反义hint
/*+ no_merge(目标视图) */
如果是内嵌视图,此时的hint不要出现视图名
5 unnest 针对子查询的hint,让优化器对目标sql中的子查询执行子查询展开
/*+ unnest */
6 no_unnest 针对子查询的hint,unnest的反义hint
/*+ no_unnest */
7 expand_table 针对单个目标表的hint,让优化器在不考虑成本的情况下对目标表执行表扩展。
/*+ expand_table(目标表) */
8 no_expand_table 针对单个目标表的hint,expand_table的反义hint
/*+ no_expand_table(目标表) */
5 index_ffs 针对单个目标表。 对目标表的目标索引执行索引快速全扫描操作
/* index_ffs (表名 目标索引(可多个)) */
/* index_ffs (表名) */
6 index_join 针对单个目标表。对目标表上的多个目标索引执行 index join 操作
oracle的Hint的更多相关文章
- 【转】Oracle索引HINT的使用
转自:Oracle索引HINT的使用 存储在数据库中数据的分布情况开发人员或管理员比Oracle优化器更加的清楚,在优化器不能作出最有查询路径选择的情况下,使用HINT(提示)人为的固定查 ...
- Oracle index hint syntax
Question: I added an index hint in my query, but the hint is being ignored. What is the correct sy ...
- Oracle 常见hint
Hints 应该慎用,收集相关表的统计信息,根据执行计划,来改变查询方式 只能在SELECT, UPDATE, INSERT, MERGE, or DELETE 关键字后面,只有insert可以用2个 ...
- Oracle索引HINT的使用
存储在数据库中数据的分布情况开发人员或管理员比Oracle优化器更加的清楚,在优化器不能作出最有查询路径选择的情况下,使用HINT(提示)人为的固定查询路径,一定程度能生成更优的执行计划. ...
- oracle parallel_index hint在非分区表的生效
之前没特别注意,在有些场景下希望使用并行索引扫描的时候,发现parallel_index hint并没有生效,于是抽空看了下文档:The PARALLEL_INDEX hint instructs t ...
- [转]Oracle中Hint深入理解
原文地址:http://czmmiao.iteye.com/blog/1478465 Hint概述 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明 ...
- Oracle中Hint深入理解(原创)
http://czmmiao.iteye.com/blog/1478465 Hint概述 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明反被聪明 ...
- Oracle中Hint深入理解
Hint概述 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比. 此时就需要DBA进行 ...
- oracle 初试 hint
最近在研究oracle的视图问题,本来想全转成 物化视图(materialized view)的,这样可以极大提升系统的响应时间,无奈工作量太大,所以就研究了SQL优化的问题. 我这个普通视图 有36 ...
- oracle中hint 详解
Hint概述 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比. 此时就需要DBA进行 ...
随机推荐
- Python mutilprocess模块之第二种创建进程方法--继承Process类
'''创建新的进程的第二种方法: 使用类的方式,可以自己定义一个类,继承Process类,每次实例化这个类的时候, 就等于实例化一个进程对象 '''from multiprocessing impor ...
- python(一):multiprocessing——死锁
前言近年来,使用python的人越来越多,这得益于其清晰的语法.低廉的入门代价等因素.尽管python受到的关注日益增多,但python并非完美,例如被人诟病最多的GIL(值得注意的是,GIL并非py ...
- bzoj3270博物馆——期望概率DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3270 设计一个状态表示两个人分别在两个点的状态,带个标号num[i][j]: 据此得到状态之 ...
- hdoj3183【思维】
思路: 处理方案非常霸气啊,无奈想不到. 说是n位去m个,那么默认就是取了n-m个数字,ok,然后m #include <iostream> #include <stdio.h> ...
- ErrorObject OpenAsync(Action<ErrorObject>arg_fnRet)
ErrorObject OpenAsync(Action<ErrorObject>arg_fnRet) public static ErrorObject Open(this ReadWr ...
- P5154 数列游戏(区间dp)
传送门 果然和dp有关的东西我绝对做不出来啊-- 设\(dp[i][j]\)表示消完区间\([i,j]\)中的数之后能得到的最大分数,如果消不完则为\(-inf\),否则枚举断点.顺便如果\(a[i] ...
- Web站点抓取工具webhttrack
近来发现Ubuntu下一个很好用的web站点抓取工具webhttrack,能够将给定网址的站点抓取到本地的目录中,并实现离线浏览,很实用. 1.安装webhttrack ubuntu 16.04的官方 ...
- 鸟哥私房菜基础篇:Linux是什么习题
猫宁!!! 参考链接:http://cn.linux.vbird.org/linux_basic/0110whatislinux.php#ex 鸟哥是为中国信息技术发展做出巨大贡献的人. 1-你在你的 ...
- pycharm命令行快捷启动
打开 本用户目录下的.bashrc文件 vim .bashrc 在末尾添加一行 alias pycharm="the-path-to-pycharm.sh" 最后保存退出 然后更新 ...
- Python标准库 urllib
urllib是python的一个获取url的模块.它用urlopen函数的形式提供了一个非常简洁的接口.这使得用各种各样的协议获取url成为可能.它同时 也提供了一个稍微复杂的接口来处理常见的状况-如 ...