1、 嵌套对象的引用:见官方文档global table hint
有时候需要使用hint来调整视图或者子查询中对象的访问方式。
和访问表中列的方式一样,可以通过前缀子查询的别名来引用其内部对象,对视图加hint的方式和子查询一样。
2、 qb_name:
qb_name是从10g开始支持的,可以自定义查询块的名称,然后外层可以引用查询块中的表。先生成一个不使用hint的执行计划,如下:
3、 driving_site
首先给出一个结论:
(a)如果sql中的表都是远端表,则语句在远端执行,然后将结果返回发起端;
(b)如果sql中的表包含本地表和远端表,则先将远端表的数据传到sql发起端,再和本地表进行关联。
这样就有一个问题,如果本地表小,远端表大,关联后的结果集小,则按照(b)的处理方式显然不够好,这时driving_site就派上了用场。
4、 no_unnest/unnest
unnest称为对子查询展开,就是不让子查询嵌套(nest)在里面。而no_unnest则与unnest相对,即让子查询不展开,让它嵌套(nest)在里面。
对于后一个语句也可以用qb_name改写,效果是一样的,如下:
select /*+ no_unnest(@qb) */ * from test t
where exists (select /*+ qb_name(qb) */ null from test1 t1 where t.name = t1.name);
unnest的用法和no_unnest是一样的,就不再举例说明。
有时候需要使用hint来调整视图或者子查询中对象的访问方式。
和访问表中列的方式一样,可以通过前缀子查询的别名来引用其内部对象,对视图加hint的方式和子查询一样。
2、 qb_name:
qb_name是从10g开始支持的,可以自定义查询块的名称,然后外层可以引用查询块中的表。先生成一个不使用hint的执行计划,如下:
3、 driving_site
首先给出一个结论:
(a)如果sql中的表都是远端表,则语句在远端执行,然后将结果返回发起端;
(b)如果sql中的表包含本地表和远端表,则先将远端表的数据传到sql发起端,再和本地表进行关联。
这样就有一个问题,如果本地表小,远端表大,关联后的结果集小,则按照(b)的处理方式显然不够好,这时driving_site就派上了用场。
4、 no_unnest/unnest
unnest称为对子查询展开,就是不让子查询嵌套(nest)在里面。而no_unnest则与unnest相对,即让子查询不展开,让它嵌套(nest)在里面。
对于后一个语句也可以用qb_name改写,效果是一样的,如下:
select /*+ no_unnest(@qb) */ * from test t
where exists (select /*+ qb_name(qb) */ null from test1 t1 where t.name = t1.name);
unnest的用法和no_unnest是一样的,就不再举例说明。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8367589/viewspace-730120/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8367589/viewspace-730120/