ビューは単純なクエリよりも高速ですか? 質問する

ビューは単純なクエリよりも高速ですか? 質問する

select *  from myView

クエリ自体よりも高速にビューを作成します (同じ resultSet を取得するため)。

select * from ([query to create same resultSet as myView])

?

ビューが何らかのキャッシュを使用して、単純なクエリと比較して高速化しているかどうかは、私には完全にはわかりません。

ベストアンサー1

はい、ビューにはクラスター化インデックスを割り当てることができます。その場合、一時的な結果がビューに保存され、結果のクエリを高速化できます。

Microsoft 独自のドキュメントでは、Views によってパフォーマンスを向上できることが明確に示されています。

まず、ユーザーが作成するビューのほとんどは単純なビューであり、この機能は使用しないため、ベース テーブルを直接クエリするのと変わりません。単純なビューはインプレースで拡張されるため、パフォーマンスの向上に直接貢献しません。これは事実です。ただし、インデックス付きビューを使用すると、パフォーマンスが大幅に向上します。

ドキュメントに直接進みましょう:

ビューに一意のクラスター化インデックスが作成されると、ビューの結果セットがすぐにマテリアライズされ、データベースの物理ストレージに保持されるため、実行時にこのコストのかかる操作を実行するオーバーヘッドが削減されます。

2 番目に、これらのインデックス付きビューは、オプティマイザーが適切な場合にテーブル参照の代わりに使用するため、別のクエリによって直接参照されていない場合でも機能します。

再度、ドキュメント:

インデックス付きビューは、クエリ実行で 2 つの方法で使用できます。クエリはインデックス付きビューを直接参照できますが、さらに重要なのは、クエリ オプティマイザーが、最も低コストのクエリ プランでクエリの一部またはすべてをビューで置き換えることができると判断した場合、ビューを選択できることです。2 番目のケースでは、基になるテーブルとその通常のインデックスの代わりにインデックス付きビューが使用されます。クエリ実行中にクエリ オプティマイザーがビューを使用するために、クエリでビューを参照する必要はありません。これにより、既存のアプリケーションは、アプリケーションを変更することなく、新しく作成されたインデックス付きビューのメリットを享受できます。

このドキュメントとパフォーマンスの改善を示すグラフは、ここ

更新 2:この回答は、パフォーマンス上の利点をもたらすのは「ビュー」ではなく「インデックス」であるという理由で批判されています。ただし、これは簡単に反論できます。

私たちは小さな国のソフトウェア会社だとしましょう。リトアニアを例に挙げます。私たちは世界中でソフトウェアを販売しており、レコードを SQL Server データベースに保存しています。私たちは非常に成功しており、数年で 1,000,000 件を超えるレコードを保有しています。しかし、税務上の目的で売上を報告する必要があることが多く、自国ではソフトウェアを 100 部しか販売していないことがわかりました。リトアニアのレコードのみのインデックス付きビューを作成することで、MS ドキュメントで説明されているように、必要なレコードをインデックス付きキャッシュに保存できます。2008 年のリトアニアの売上レポートを実行すると、クエリは深さ 7 (未使用のリーフを含む Log2(100)) のインデックスを検索します。同じことをビューなしで実行し、テーブルへのインデックスだけに頼ると、検索深さ 21 のインデックス ツリーをトラバースする必要があります。

明らかに、ビュー自体を使用すると、インデックスのみを使用するよりもパフォーマンス上の利点 (3 倍) が得られます。私は実際の例を使用しようとしましたが、リトアニアの売上の単純なリストを使用すると、さらに大きな利点が得られることがわかります。

この例では、単純な B ツリーを使用していることに注意してください。SQL Server が何らかの B ツリーのバリエーションを使用していることはほぼ確実ですが、詳細はわかりません。とはいえ、要点は変わりません。

更新 3:インデックス付きビューは、基になるテーブルに配置されたインデックスを使用するだけなのかどうかという疑問が生じています。言い換えると、「インデックス付きビューは、標準のインデックスと同等であり、ビューに新しいものや独自のものを提供するものではありません。」もちろん、これが真実であれば、上記の分析は正しくありません。この批判が妥当でも真実でもないと考える理由を示す Microsoft ドキュメントからの引用を次に示します。

インデックスを使用してクエリ パフォーマンスを向上させることは新しい概念ではありませんが、インデックス付きビューを使用すると、標準のインデックスでは実現できない追加のパフォーマンス上の利点が得られます。

物理ストレージ内のデータの永続性に関する上記の引用と、ビューでインデックスが作成される方法に関するドキュメント内のその他の情報と合わせて、インデックス付きビューは、メイン テーブルで定義されたインデックスを使用するキャッシュされた SQL 選択だけではないと言っても過言ではないと思います。したがって、私はこの回答を引き続き支持します。

おすすめ記事