2016-06-14 17 views
-2

私はデータウェアハウジング環境を持っており、インデックス作成に関して質問があります。私は、ヘッダーファクトテーブルを持っていて、詳細レベルのファクトテーブルに結合します。ディテールファクト表は、次に多数のディメンションに結合されます。SQL Serverファクトテーブルのインデックス付け

だから我々は持っている:私のクエリで

FactHeader 
FactDetail 

Dim1 
Dim2 
Dim3 
Dim4 

を、私はニーズを報告するための記述を取得するためにディメンション表のすべてにFactDetailに参加する必要があります。

ノンクラスタード・インデックスはFactDetail.FactHeaderKeyです。私の質問は:私はこの非クラスタ化インデックスにすべての外部キーを含めるか、私は別の非クラスタ化インデックスを外部キーに作成する必要がありますか?別のインデックスを作成すると、クラスタ化インデックススキャンが実行されます。これは、ID列のすぐ上にあります。

クラスタ化されていないインデックスを1つ作成すると、それはインデックスシークを行い、もちろん外部キーも一緒に返します。私には、インクルードで非クラスタ化インデックスを1つだけ実行する必要があるようですが、何らかの理由でそれがわかりにくいようです。

ご迷惑をおかけして申し訳ございません。

答えて

0

したがって、インデックスを設計するときは、OLTPまたはOLAPに基づいています。あなたがデータウェアハウスなので、インデックスはOLAPに基づいています。したがって、外部キーに個別の索引を作成するルールは、OLTPデータベース設計用です。 OLAPは主にデータ検索用であるため、索引は主に問合せに基づいて設計されます。索引アーキテクチャは非常に重要です。なぜなら、Bツリーにすべての列を含めるだけで済むためです。しかし、クエリに関連するすべてのテーブルの結合が存在している場合は、それらの外部キーを持つクラスタ化されていないインデックスを1つ作成します。

関連する問題