1,本地(服务器a)数据库上执行
insert into tt1         ----表tt1在服务器a上
select * from
ta@b t1,
tb@b t2          -----@b在服务器b上
where t1.id=t2.id and t1.id>1002,服务器b上执行
insert into tt2      ---  表tt2在服务器b 的库@b上
select * from
ta t1,
tb t2          
where t1.id=t2.id and t1.id>100
第1种情况将select 结果返回给本地(即服务器a),然后执行插入操作.
第2种情况将select 结果返回给服务器b,然后执行插入操作.
问题是除了这点区别外,
在select 时有什么不同吗???在利用索引啊性能啊方面。。

解决方案 »

  1.   

    俺是楼主,
    哎!!!!,怎么会是这样?看起来太不清楚了。
    1,本地(服务器a)数据库上执行 
    insert into tt1        ----表tt1在服务器a上 
    select * from 
    ta@b t1, 
    tb@b t2          -----@b在服务器b上 
    where t1.id=t2.id and t1.id>100 
    第1种情况,注意看下粗体部分
      

  2.   

    在http://space6212.itpub.net/post/12157/304213中提到如果所有表都是远端表的话,那么该语句在远端执行,在得到结果后返回调用端.
    既然是在远端执行,相当于远端本地执行,可以在远端数据库查询到执行计划
      

  3.   

    http://space6212.itpub.net/post/12157/304213
    简单总结一下:
    1、不管是CBO还是RBO,如果SQL中涉及的表都是远端的,那么该语句在远端执行,在得到结果后返回调用端。
    2、无论是CBO还是RBO,当查询包含了本地表和远端表时,oracle总是先把远端表的数据通过网络传送到SQL的发起端,再跟本地表进行关联得到最终结果。
    3、可以通过driving_site这个hint来执行SQL在那端执行。这个hints在某些特定条件下的分布式查询调优非常有用。