0

ビューv_myviewを持つリモートデータベースAがあります。私は、データベースAのv_myviewにアクセスするためのdblinkを持つローカルデータベースで作業しています。次のようにビューをクエリすると、次のようになります。

select * from v_myview @ dblink ;

50万行を返します。ビューから特定の行を取得したいだけです。たとえば、id = 123の行を取得するには、クエリは次のようになります。

select * from v_myview @ dblink where id=123; 

これは期待どおりに機能します。ここに私の質問があります。このクエリを実行すると、リモートデータベースは最初に50万行を生成し、次にそこからid = 123の行を検索しますか?または、リモートビューが最初にフィルターを適用してから、最初に50万行を取得せずにDBにクエリを実行しますか?どうすればそれを知ることができますか。ありがとうございました!

4

1 に答える 1

3

オラクルはどちらでも自由です。フィルタリングがローカルで行われているかリモートで行われているかを確認するには、クエリ プランを確認する必要があります。

おそらく、あなたが提示したような単純なケースでは、オプティマイザーは、ローカルでフィルタリングするためだけにネットワーク経由で 50 万行をプルするよりも、リモート サーバーにフィルターを送信する方が効率的であると期待するでしょう。フィルター処理されていないクエリが 50 万行ではなく 1 行を返すことをオプティマイザーが想定している場合、その計算は異なる可能性があります。また、ローカル テーブルへの結合やローカル サーバーでの関数の呼び出しなどを実行してクエリがより複雑になる場合は、異なる可能性があります。 .

于 2013-03-20T20:50:10.283 に答える