请问我的一个查询语句是要丛dblink查询几个表,driving_site中包含多个表的语法是怎么样的?比如:select /*+driving_site(table1,table2,table3)*/
table1.column,table2.column,table3.column...
from table1@dblink table1
,table2@dblink table2
,table3@dblink table3
where ...
table1.column,table2.column,table3.column...
from table1@dblink table1
,table2@dblink table2
,table3@dblink table3
where ...
替换成/*+ remote_mapped(dblink) */
好些呢?
对于那些存在远程的SQL,ORACLE可以有两种选择:
1,在远端执行SQL
2,在本地执行SQL
至于如果选择SQL的执行地点呢,这完全是由SQL决定的,看在哪端执行的COST低就在哪端执行。但是ORACLE并不总是那么聪明,所以有的时候需要我们自己觉得SQL在哪端执行。我们可以driving_site这个HINT来决定SQL的执行。
看下面的SQL:SELECT /*+driving_site(a)*/
a.column_1,
b.column_2
FROM table_1@dl_remote a,
table_2 b
WHERE a.column_1 = b.column;由于table_1是远端的表,在/*+driving_site(a)*/提示的影响下,oracle会把表table_2发送到dl_remote所指的远端,
然后在远端进行连接,最后把执行的结果在返回给本地。SELECT /*+driving_site(b)*/
a.column_1,
b.column_2
FROM table_1@dl_remote a,
table_2 b
WHERE a.column_1 = b.column;由于table_2是本地的表,在/*+driving_site(b)*/提示的影响下,oracle会把表table_1的数据取到本地,
然后在本地进行连接,最后把执行的结果在返回。如果表table_1和table_2的记录数相差很多的话,选择合适的执行端就显得极其重要了。