1

私はOracleDBを使用しています。3つのテーブルに結合する1つのビューがあるとしましょう。ビューにはそれぞれ2つのフィールドがあります。各フィールドには、3つのテーブルのうち2つからのデータのみが必要です。

ビューをクエリして1つのフィールドのみを返す場合でも、ビューは3つのテーブルに結合しますか、それともフィールドを計算するために必要な2つのテーブルに結合しますか?

4

3 に答える 3

2

通常、3 つのテーブルにヒットする必要があります。検討

SELECT A.VAL, B.VAL, C.VAL FROM A JOIN B ON A.ID = B.ID JOIN C ON A.ID = C.ID

「A」の単一の ID が、B または C のいずれかでゼロ、1、または複数の一致を持つ可能性があります。テーブル「C」が空の場合、ビューは行を返さないため、A.VAL または B を照会するだけでも.VAL、"C" に対応する行があるかどうかを確認する必要があります。

例外は、参照整合性制約が適用されているために、'B' の行が常に 'A' の親行を持つことをオプティマイザが認識している場合です。その場合、B.VAL の選択では、'A' の親行の存在を実際に確認する必要はありません。これは、この記事で実証されています

于 2010-04-26T23:21:24.030 に答える
0

これは、使用されている結合のタイプによって異なる可能性があります。それらがすべて内部結合である場合は、3つのテーブルすべてを調べる必要があります。

于 2010-04-26T19:15:51.917 に答える
0

一般に、データベース エンジンは 3 つのテーブルすべてを結合して、正しい答えが得られるようにします。

Oracle は、結果が変わらないテーブルの 1 つを削除することがあります。

これは、次の場合に実行できます:-

  • 削除するテーブルに外部キー制約があります (つまり、テーブル内の行が見つかることが保証されます)。

  • それ以外の場合、テーブルは使用されません。つまり、where 句などで選択されていません。

于 2010-04-26T23:21:15.123 に答える