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 时有什么不同吗???在利用索引啊性能啊方面。。
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,本地(服务器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种情况,注意看下粗体部分
既然是在远端执行,相当于远端本地执行,可以在远端数据库查询到执行计划
简单总结一下:
1、不管是CBO还是RBO,如果SQL中涉及的表都是远端的,那么该语句在远端执行,在得到结果后返回调用端。
2、无论是CBO还是RBO,当查询包含了本地表和远端表时,oracle总是先把远端表的数据通过网络传送到SQL的发起端,再跟本地表进行关联得到最终结果。
3、可以通过driving_site这个hint来执行SQL在那端执行。这个hints在某些特定条件下的分布式查询调优非常有用。