我要做一个系统,使用两个数据库服务器(A和B机器),所做的系统在C机器上,所做系统直接登录到A数据库上,在A数据库上创建了B数据库的Database link,如果要做如下几项查询,系统是如何执行的?
1、在一个select语句中,from子句中的多个表分别来自于A、B两个数据库,那么关联时系统是将B数据库上的相关数据查询结果同步到A数据库的临时表空间中再与A数据库中的相关表进行关联后查询,最终查询结果发送到C机器的应用软件,是这样的吗?
2、在一个select语句中,from子句中的多个表都是来自于B数据库,那么关联是如下三种情况中的哪一种?或者还是有第四种情况?一、在B数据库服务器上关联后查询到最终结果直接发送到C机器的应用程序;二、在B数据库服务器上关联后查询到结果集发送到A数据库的临时表空间后,再从A数据库得到最终数据库发送到C应用程序;三、在B数据库上的每张表的查询子集发送到A数据库临时表空间后进行关联查询,最终结果发送到C应用程序。

解决方案 »

  1.   

    这个相当高深,看来只有仔细去看下Oracle的透明网关实现了,不过这些行为可以通过Hint优化,也就是说到底怎么干是由优化器决定的!
      

  2.   

    看一下执行计划,应该是1.3中的一个,
    如果你where条件中,b表用到了索引,那么就会先查询b的一个结果集出来再到a;
    如果没有,那么可能就是全部拿到a的临时表空间了。
    查看远端的执行计划:select 后边加上hint 语句select /*+driving_site(b)*/ from a,b