0

私は既存のシステムを継承し、いくつかのことを理解しようとしています。

システムは

SELECT * FROM v_myView WHERE mvViewCol = 'someValue'

に基づいてv_myViewの合計を実行しますTable1myViewCol

SQL Server 2005はクエリを最適化しますか、それとも合計は常に全体で発生しますTable1か?

パラメータ化されたビューを使用できることは理解していますが、不必要に変更を加えたくありません。

乾杯ジェフ

4

3 に答える 3

2

ビューには実行時のコストはまったくありません。ビュー定義をテキストとして貼り付けたかのように、それらは常に周囲のクエリにインライン化されます。それ以外の方法で使用するのは実用的ではありません。

SQL Server(2005)はクエリを最適化しますか、それとも合計は常にTable1全体で発生しますか。

最適化されます。

于 2013-01-21T23:18:07.077 に答える
1

これは複雑な質問です。一番いい説明はここにあると思います。この点に関して、Microsoftのドキュメントがもう少し明確になっていることを望みます。

ビューが作成されると、クエリが解析されます。これはそれが正しいことを保証します。

実行プランは、クエリが最初に実行されたときに決定されます(近似値)。この実行プランは、後続の呼び出しのためにプランキャッシュに残ります。したがって、適切な列にインデックスがあり、最初の実行にwhereインデックスを使用する句がある場合、後続の呼び出しでもインデックスが使用されます。

プランがプランキャッシュにないときにビューが呼び出されるのは実際には初めてなので、近似的に言います。データベースへの特定の変更は、サーバーの再起動と同様に、計画をフラッシュします。

したがって、where句を使用してビューにのみアクセスする場合、ビューの後続の使用はその目的のために最適化されます。

于 2013-01-21T23:26:59.877 に答える
0

SQL Server 2005は、クエリで参照されるたびにビューを最適化します:http ://technet.microsoft.com/en-us/library/cc917715.aspx

「ビューの拡張後、SQLServerクエリオプティマイザーは実行中のクエリの単一の実行プランをコンパイルします。」

2005をインストールしていませんが、2008R2と同様に動作します-クエリ最適化プランを表示するには、クエリウィンドウを右クリックし、[推定実行プランの表示]を選択して詳細を確認し、ボトルネックを特定します。

[クエリ]メニューオプションには、[データベースチューニングアドバイザーでクエリを分析する]があり、これも役立つ場合があります。

于 2013-01-21T23:22:28.347 に答える