1

我有一个形式的 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

此外,刷新统计数据似乎没有效果。

有人可以解释一下哪些因素会影响通过 dblink 进行的连接如何拆分并分发给远程数据库?是否有任何统计数据在此过程中发挥作用,以及如何发挥作用?

此外,“嵌套循环”甚至是真正的问题,还是完全是其他问题?
也许真正的问题是在本地提取 A 和 B 的全部内容并加入,而不是远程加入/过滤。(也许DRIVING_SITE提示会解决这个问题?)

谢谢。

4

1 回答 1

1

这个http://docs.oracle.com/cd/B28359_01/server.111/b28310/ds_appdev004.htm可能会有所帮助

于 2011-12-16T11:46:16.753 回答