通过dblink查询嵌套循环(Oracle 11g)

时间:2011-12-15 19:56:14

标签: oracle oracle11g sql-execution-plan dblink

我有一个

形式的SQL查询
SELECT ... FROM A@DB1 a, B@DB1 b, C@DB2 c
WHERE A.x = B.x and B.y = C.y

其中前两个表是一个数据库的dblink,最后一个是第二个数据库。 没有访问本地表。

解释计划显示了一个嵌套循环,即使所有表都很大,我希望在这种情况下进行散列连接。 (如果所有表都是本地的,我希望散列连接。)

“解释计划”看起来像这样:

NESTED LOOP 
    HASH JOIN        
        REMOTE     A
        REMOTE     B
    REMOTE         C

此外,清爽的统计数据似乎没有效果。

有人可以解释哪些因素会影响dblinks的连接如何分割并分发给远程数据库?任何统计数据在这个过程中都起作用吗?

此外,'嵌套循环'是真正的问题,还是完全不同的东西?
也许真正的问题是在本地拉动A和B的全部内容并加入,而不是远程加入/过滤。 (也许DRIVING_SITE提示会解决这个问题?)

感谢。

1 个答案:

答案 0 :(得分:1)