我有一个
形式的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
提示会解决这个问题?)
感谢。