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