2016-03-30 14 views
1

私は、ビューがOracleの基礎となるテーブルまたは一連のテーブルのウィンドウであることを理解しています。たとえば、複数のテーブルを結合することによって作成されたビューがある場合、ビューからデータを選択すると、実際の結合操作が実行されますか?複数の表を結合してデータをフェッチするよりパフォーマンスが優れているか、パフォーマンスに関して同じですか?OracleビューとOracleのテーブルの結合

+2

実行計画を見てみましょう:しかし、フィルタリング基準が適用されると、ビューwuldは遅くなると思います。 (マテリアライズド・ビューについては言及していないものと仮定します)最初にビューを実体化してから制限を適用する必要があります。テーブルから直接選択すると、エンジンは結合を最適化し、critieraとインデックスに基づいてデータをフィルタできます。ビュー***はできないことがあります***。 – xQbert

+0

おかげでxQbert、はい私は意見について話していた。追加の記憶領域を使用してマテリアライズド・ビューを想定しています。 –

+0

ありがとうございましたxQbert、 "マテリアル"はどういう意味ですか? –

答えて

1

通常、単一のクエリとビューを使用する論理的に同等のクエリの間には、パフォーマンスの差はありません。

Oracleには、外部の問合せとビューを結合できるオプティマイザ変換があります。プレディケートプッシュ、単純および複雑なビューマージなどがあります。ビューは、行を返す関数ではなく、大きなクエリを作成するテキストマクロに似ています。

たとえば、次の問合せでは、Oracleは主キー列の述語をビューにプッシュするほどスマートになるでしょう。ビュー自体が何百万行も戻ってくるかもしれませんが、問合せ全体が実行されると、Oracleは最初に主キー列に述語を適用します。

select * 
from view_returns_millions_of_rows 
where primary_key_value = 1; 
関連する問題