与优化器模式相关的hint
[plain]view plaincopy1.1/*+all_rows*/让优化器启动CBO1.2/*+first_rows(n)*/优化器启动CBO,选择会快返回前n行数据的执行计划。与first_rows_n不同,first_rows_nn只能为1,10,100,1000.1.3/*+rule*/启动RBO,与其他hint连用,其他hint一般会失效。
与表及索引访问相关的hint2.1full(xxx)全表扫描2.2index(目标表目标索引1目标索引2)2.3no_index(目标表目标索引1目标索引2)2.4index_desc(目标表目标索引1目标索引2)让优化器对目标索引执行降序扫描,如目标索引是降序,则hint则以升序扫描目标索引。2.5index_ffs(目标表目标索引1目标索引2)索引快速全扫描
与表连接顺序相关的hint3.1ordered让优化器在执行多表连接时,按照他们在sql中where条件出现顺序进行连接。查询转换可能会导致这个hint失效。3.2leading(表1表2)让优化器将我们执行多个表的连接结果作为目标sql表连接过程中的结果集,并将hint中自左到右的第一个表,作为表连接的驱动表。
与表连接方法相关的hint4.1use_merge(表1表2)让优化器将我们指定的多个表作为被驱动表与其他表或结果集做排序合并连接。4.2no_use_merge(表1表2)4.3use_nl(表1表2)让优化器将我们指定的多个表作为被驱动表与其他表或结果集做嵌套循环连接。经常与leading合用。/*+use_nl(s,X)leadingX*/4.4no_use_merge(表1表2)4.5use_hash(表1表2)让优化器将我们指定的多个表作为被驱动表与其他表或结果集做哈希连接。经常与leading合用。4.6no_use_merge(表1表2)4.7merge_aj针对子查询的hint,让优化器对目标表执行排序合并反连接。4.8nl_aj针对子查询的hint,让优化器对目标表执行嵌套循环反连接。4.9hash_aj针对子查询的hint,让优化器对目标表执行哈希反连接。4.10merge_sj针对子查询的hint,让优化器对目标表执行排序合并半连接。4.11nl_sj针对子查询的hint,让优化器对目标表执行嵌套循环半连接。4.12hash_sj针对子查询的hint,让优化器对目标表执行哈希半连接
与查询转换相关的hint5.1use_concat是针对目标sql的hint,让优化器对目标sql使用in_list扩展或or_list扩展。5.2no_expand是use_concat反义hint,不让优化器对目标sql使用in_list扩展或or_list扩展。5.3merge是针对单个目标视图的hint,让优化器对目标视图执行视图合并(viewmerging)5.4no_merge是针对merge的反义hint,不让优化器对目标视图执行视图合并(viewmerging)5.5unnest是针对子查询的hint,让优化器对目标sql中的子查询展开(subqueryunnesting)5.6no_unnest是针对unnest反义的hint,不让优化器对目标sql中的子查询展开(subqueryunnesting)5.7expand_table(表)让优化器在不考虑成本的情况下,对表进行表扩展5.8no_expand_table(表)expand_table(表)的反义hint,不对表进行表扩展
与并行有关的hint6.1parallel并行6.2no_parallel针对整个目标sql的hint6.3parallel_index(表index-1index-2...index-nnnn)6.4no_parallel_index(表index-1index-2...index-n)
其他常见hint7.1driving_site让优化器在我们指定目标表所在的节点上执行目标sql。只适用于带dblink的分布式查询语句。7.2append让优化器执行带子查询的insert时,绕开buffercache,使用直接路径插入。7.3append_values让优化器执行带values的insert时,绕开buffercache,使用直接路径插入。(11R2)7.4push_pred针对目标视图的hint,让优化器对目标视图执行连接谓词推入。7.5no_push_pred针对目标视图的hint,不让优化器对目标视图执行连接谓词推入。7.6push_subq针对子查询的hint,让优化器尽早执行目标sql中不能做子查询展开的子查询。7.7no_push_subq针对子查询的hint,让优化器最后执行目标sql中不能做子查询展开的子查询。7.8opt_param针对目标sql的hint,用来修改针对目标sql比系统级,session级更细颗粒的更改。7.9optimizer_features_enable('优化器版本号')更改优化器版本7.10qb_name对一个查询块指定自定义的名称。7.11cardinality针对单个目标表的hint,用来设置对目标表执行扫描操作后的cardinality的值。(对唯一索引扫描无效)7.12swap_join_inputs针对hash连接的hint,让优化器交换原hash连接的驱动表和被驱动表顺序。