2012-02-14 12 views
0

私はビジュアルスタジオで、複数のテーブルの2つの列に複合インデックスを作成しようとしています。 2つの列があります。ユーザーIDはすべての表にあり、外部キーとして機能します。ユーザーが1つの以上のアドレスと1台の以上の携帯電話を持つことができること複合インデックス:列の順序はsql server/linqのsqlに関係しますか?

TablePhones: 
PhoneID | UserID | PhonePrefix | PhoneNumber | PhoneExtention 

TableAddresses: 
AddressID | UserID | AddressStreet1 | AddressStreet2 | AddressCity... 

注:その後、各テーブルは次のように...、電話、住所などのオブジェクトの部品を参照するために、独自のキーを持っています数。

私はLINQ to SQLはして取得するwhere句クエリオブジェクトは、次のようになり使用しています:現時点では

read queries: 
where x.UserID == TheUserID 

update/delete queries: 
where x.UserID == TheUserID && x.PhoneID = ThePhoneID 

を、主キーはphoneidなどとのAddressIdにあり、私はしていますよPhoneID/UserIDとAddressID/UserIDに複合インデックスを作成します。データベースの列の順序はそのままですか、すべてのテーブルの最初の位置にUserIDを移動する必要があります。

ありがとうございます。

答えて

2

表の列の順序は関係ありません。少なくともSQLServerのために。重要なのは、索引に順序フィールドがリストされていることです。先頭の列[s]に条件を付けたクエリは、インデックスから非常に利益を得ます。

プライマリキーがクラスタ化されている場合は、userIDにのみインデックスを作成できます。コンポジットキーは不要です。とにかく、それはクラスタ化されたキーへの参照を持つでしょう。

+0

UserIDが一意でない場合はどうなりますか?それは主キーの問題ですか? – frenchie

+0

私はあなたのことを正しく理解していません。すでに主キーがあるとします。 – a1ex07

+0

テーブル構造を再設計し、複合主キーを使用する場合は、次の点を考慮してください。これらのテーブルのレコードを別のテーブルに参照する必要がある場合は、(userId、WHERE句の列の順序も重要ですか? – a1ex07

関連する問題