2012-03-12 8 views
1

私はSQL Server 2005で2つの外部キーfk_FacilityIDとfk_OrderIDを持つテーブルtbl_FacilityOrdersを持っているとします。それには数百の施設からの注文が含まれている可能性があります。私は単一のレコードを照会する必要があり、ファシリティIDとオーダーIDの両方が利用可能になります。 fk_FacilityIDとfk_OrderIDのインデックスを定義し、両方をクエリに渡すか、単にfk_OrderIDを使用する方が良いでしょうか。注文IDよりも施設IDが少なくなるため、他の施設の記録を最初に除外することが有益である可能性があります。インデックスに役立つ2番目のID列を追加していますか?

2番目の質問は、上記の2つの列のクエリを使用している場合、WHERE句の列を問題に書き込むか、またはインデックスの順番で評価するのに十分なエンジンですか?

E.G.です:

に相当
WHERE fk_facilityID = @FacilityID AND fk_OrderID = @OrderID 

WHERE fk_OrderID = @OrderID AND fk_FacilityID = @FacilityID 

答えて

7

fk_FacilityIDとfk_OrderIDにインデックスを定義し、両方をクエリに渡すか、fk_OrderIDを使用する方がよいでしょうか。

OrderIdがユニークである場合、与えられたシナリオのために他のフィールドを追加することには実質的な利点がありません。ただし、いつもJOINのキーになっているので、FKのインデックスを作成することをお勧めします。

上記の2つのcolumnnクエリを使用していた場合、問題のWHERE句の列を書き込むか、インデックスの順番で評価するのに十分なエンジンですか?

いいえ、ここではオーダーは関係ありません。重要なのは、フィールドのSETSが一致していることです。つまり、フィールドAとフィールドBの両方がインデックスとWHERE句にあります。

インデックス内のフィールドの順番はですが、でも問題ありません。最初のフィールドの値を知らなくても、インデックス内の2番目のフィールドを使用することはできません。

+0

+1インデックスの順序が重要であることを言及しています... –

+0

ありがとう、よく知っておきたい!私はしばらくこれについて疑問に思っていた。 – xr280xr

2

外部キーごとにインデックスを作成する必要があります。この質問の目的だけでなく、indexing your foreign keys is good practice in generalです。

2番目の質問に答えるには、2つのステートメントは同等です。 SQL Server should internally re-order the statements to arrive at the optimal execution plan ...ただし、生成された実行計画を常に検証して、期待どおりに動作することを確認する必要があります。

+0

+1リンクをサポートするために+1 – JNK

関連する問題