2016-10-26 14 views
1

私は40の異なるサーバーからデータをコンパイルするためのデータベースを構築しています。これらのサーバーはすべて同じ設計ですが、単一の場所用のプラットフォームを使用しているため、場所ごとに識別IDはありません。クラスタ化されたインデックスからの列を非クラスタ化することに?

LocationID, TransactionID, CustomerID, ServiceID, TransDate, Amount 

と列のための

LocationID, CustomerID, FirstName, LastName, Balance 

:私はコンパイルさデータのための場所ごとにキーを作成しますが、しているため、これまでほとんどすべての私のテーブルは、以下のようなデザインの複合主キーを持っています。

私の非クラスタ化インデックスに関しては、私の質問があります。 LocationIDがすでにテーブルのクラスタリングキーに入っていても、TransactionテーブルのCustomerIDテーブルにインデックスを作成する場合は、LocationIDカラムを含めるのが最善でしょうか?

あらかじめ感謝していたことを願っています!

+2

テーブルのクラスタ化されたキーにLocationIDが含まれている場合、既定では非クラスタ化インデックスにすべて含まれます。 – dfundako

+0

参考文献[こちら](http://sqlblog.com/blogs/kalen_delaney/archive/2010/03/07/more-about-nonclustered-index-keys.aspx) – HABO

答えて

0

クラスタリングは、すべてが言ってやったときに、データを取得する方法についてです。 CustomerIDLocationIDに基づいてデータを取得する場合は、それらをある種のインデックスに含めることをお勧めします。しかし、問題は、1)データをロードする必要があり、クラスタ化インデックスの再バランシングが終了する可能性があります(つまり、LocationIDにロードする前にLocationID 2をロードした場合)、2)その中にLocationIDを含めるようにクエリを定義してください。

LocationIDをすべてのテーブルとすべてのクエリ結合に組み込もうとするのではなく、既に同じデータ構造を保持しながら、すべてのキーを再キーする方がきれいだと思います。スキル全体を変更するのではなく、データを簡単に再キーする方が簡単かもしれないと思います。 と思われる場合はLocationIDを簡単に追加することができますが、特に外部の結合クエリの場合は、単純な同型語よりも微妙な違いがあります。

関連する問題