私は現在、「Microsoft SQL Server 2012、第3版でビジネスインテリジェンスを提供する」という本を読んでいます。この本には、次のようなセクションがあります。
データマートの機能
データマートは、組織の日常のトランザクションを管理するのではなく、ビジネスインテリジェンスのソースとして機能することを目的としているため、OLTPデータベースと同じように設計されていません。データマートは、正規化のルールに基づいて構築されるのではなく、アクセス速度を重視して構築されています。データマートは依然としてリレーショナルデータベースですが、分析とレポートのためにデータを出力するときに必要なテーブル結合が少なくなるように設計されています。データマートでは、速度を上げるためにデータを繰り返し(非正規化)することができます。
データマートを設計する場合、正規化のルールは、「事実」を中心に編成された別の設計方法に置き換えられます。これらの新しい設計アプローチは、星と雪片と呼ばれます。「スタースキーマ」と「スノーフレークスキーマ」のセクションで、星と雪片について説明します。星や雪片は子供の空想のようなもののように見えるかもしれませんが、実際には、すばやく簡単にアクセスできる情報を作成するための非常に成長した現実的なアプローチを提供します。
なんて素晴らしい情報でしょう。しかし、ここから混乱が生じ始めました。SQLServerでは、クエリのパフォーマンスを最適化する方法としてストアドプロシージャを使用できることを知っています。これらの内部動作はわかりませんが、サーバーには、従来の正規化されたデータベースでクエリをすばやく実行するためにクエリのパフォーマンスを最適化する方法が組み込まれていることを知っています。たとえば、販売されたすべての個別の製品である20,000行のリストを含むSalesテーブルがあるとします。これらの行の合計を知りたい場合は、おそらくクエリSELECT SUM(SALES.SALESPRICE) FROM SALES
をストアドプロシージャに保存します。
ストアドプロシージャがプリコンパイルされていることがわかっている場合、サーバーは、挿入が行われるたびにこの合計を取得してクエリの結果をキャッシュする必要があることを自動的に認識しませんか?したがって、20,001行が追加されるたびに、販売額が自動的に保存されるため、上記のストアドプロシージャの結果をすぐに利用できますか?それが実行計画の背後にある全体的な考えではありませんか?または、「最適化された」クエリが行うことを完全に見逃しましたか?
そうでない場合は、ストアドプロシージャの内部動作と、SQL Server Management Studio(SSMS)から直接クエリを実行するよりもパフォーマンスが向上する方法を理解していただければ幸いです。
ありがとうございました!!!!