2011-10-24 20 views
6

VIEWに複数のINNER JOINがありますが、そのVIEWに対してクエリを実行すると、メインテーブルからの列のみがSELECTされます.SQL Serverは実行中または表示中に不要な結合を無視します。何らかの理由でまだ実行する必要がありますか?SQL Serverのビューのパフォーマンス

異なる場合は、SQL Server 2008 R2にあります。どちらの場合も、これはすでに優れた解決策ではないことが分かっていますが、私は2つの悪のうち小さいものを見つけようとしています。

答えて

3

は、実際にセマンティクスを変更しない場合は、結合を無視します。その1つの例は、テーブル間に信頼できる外部キー制約があり、参照するテーブル(See example 9 in this article)からの列のみを選択している場合です。

特定のケースで確実に実行計画を確認する必要があります。

+1

いい記事、まさに私が探していたもの、ありがとう。あなたが推測するかもしれないが、私はこの質問を最初に頼んでいるので、このDBのFKの関係は事実上存在しない。今、オプティマイザが基本的にこのシナリオで私を助けてくれるチャンスがない理由を知ることができ、私の実行計画は同じことを示唆しています。 –

1

これらのテーブルからフィールドを取得しないと、EXISTS句を使用したほうが速くなる可能性があります。これにより、結果に重大なテーブルの重複が発生しなくなります。

1

オプティマイザが不要な結合を無視しても、特定のケースを処理する別のビューを作成するだけで済みます。ビューの使用と悪用(このケースなど)は手を抜けて、難読化、混乱、非常に重要なパフォーマンスの問題につながる可能性があります。

「小さい」ビューのセットに参加させて現在使用しているのと同じデータセットを提供することで、使用する予定のビューをリファクタリングすることさえ考えているかもしれません。コース。

関連する問題