1

次の形式の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ヒントがそれを修正するでしょうか?)

ありがとう。

4

1 に答える 1

1

このhttp://docs.oracle.com/cd/B28359_01/server.111/b28310/ds_appdev004.htmが役立つ場合があります

于 2011-12-16T11:46:16.753 に答える