5、 push_subq
这个hint的作用是将nonmerged子查询的执行顺序提前(一般来说,nonmerged子查询的执行顺序比较靠后)。且看下面两个语句执行计划的差别:
由于子查询返回的结果集非常小,所以先和test1进行连接更合理。
6、 merge/no_merge
这两个hint和另外两个hint push_pred/no_ push_pred应用场景很接近,都是用来控制和view(包括视图和子查询)的连接行为。见下面两个语句的执行计划:
前一个先生成子查询结果集,再和t1进行关联,后一个则直接进行关联,也就是连接的时机有所不同。
7、 push_pred/no_ push_pred
push_pred是把连接谓词push到view里,见下面语句的执行计划:
猜测:push_pred会导致表连接一定是走nested loop的。
8、 use_concat/ no_expand
这两个hint比较容易理解,use_concat就是将含有or操作符的查询转换成多块进行查询,然后做个concatenation。no_expand则与use_concat相对。
9、 merge_aj/hash_aj/nl_aj/merge_sj /hash_sj/ nl_sj
这几个是undocumented hint,其中后缀aj表示anti join,主要用于not exists和not in;后缀sj表示semi join,主要用于exists和in。
这个hint的作用是将nonmerged子查询的执行顺序提前(一般来说,nonmerged子查询的执行顺序比较靠后)。且看下面两个语句执行计划的差别:
由于子查询返回的结果集非常小,所以先和test1进行连接更合理。
6、 merge/no_merge
这两个hint和另外两个hint push_pred/no_ push_pred应用场景很接近,都是用来控制和view(包括视图和子查询)的连接行为。见下面两个语句的执行计划:
前一个先生成子查询结果集,再和t1进行关联,后一个则直接进行关联,也就是连接的时机有所不同。
7、 push_pred/no_ push_pred
push_pred是把连接谓词push到view里,见下面语句的执行计划:
猜测:push_pred会导致表连接一定是走nested loop的。
8、 use_concat/ no_expand
这两个hint比较容易理解,use_concat就是将含有or操作符的查询转换成多块进行查询,然后做个concatenation。no_expand则与use_concat相对。
9、 merge_aj/hash_aj/nl_aj/merge_sj /hash_sj/ nl_sj
这几个是undocumented hint,其中后缀aj表示anti join,主要用于not exists和not in;后缀sj表示semi join,主要用于exists和in。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8367589/viewspace-730121/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8367589/viewspace-730121/