次の形式のSQLクエリがあります
SELECT ... FROM A@DB1 a, B@DB1 b, C@DB2 c
WHERE A.x = B.x and B.y = C.y
ここで、最初の2つのテーブルは1つのデータベースへのdblinkであり、最後のテーブルは2番目のデータベースにあります。ローカルテーブルにはアクセスしません。
Explain Planは、すべてのテーブルが大きく、この状況でハッシュ結合を期待しているにもかかわらず、ネストされたループを示しています。(すべてのテーブルがローカルの場合、ハッシュ結合を期待します。)
「説明プラン」は次のようになります。
NESTED LOOP
HASH JOIN
REMOTE A
REMOTE B
REMOTE C
さらに、統計の更新は効果がないようでした。
誰かがdblinksを介した結合が分割されてリモートDBに渡される方法に影響を与える要因を説明できますか?このプロセスでどのような統計が役割を果たしますか?
また、「ネストされたループ」は本当の問題でさえありますか、それともまったく別のものですか?
おそらく本当の問題は、リモートで参加/フィルタリングするのではなく、AとBのすべてのコンテンツをローカルでプルして参加することです。(おそらくDRIVING_SITE
ヒントがそれを修正するでしょうか?)
ありがとう。