外部キーはクエリのパフォーマンスを向上させますか? 質問する

外部キーはクエリのパフォーマンスを向上させますか? 質問する

Products と ProductCategories という 2 つのテーブルがあるとします。両方のテーブルには CategoryId の関係があります。これがクエリです。

SELECT p.ProductId, p.Name, c.CategoryId, c.Name AS Category
FROM Products p
INNER JOIN ProductCategories c ON p.CategoryId = c.CategoryId
WHERE c.CategoryId = 1;

実行プランを作成すると、テーブル ProductCategories はクラスター インデックス シークを実行しますが、これは期待どおりです。しかし、テーブル Products の場合はクラスター インデックス スキャンが実行されるため、疑問に思います。なぜ FK はクエリ パフォーマンスの向上に役立たないのでしょうか?

そのため、Products.CategoryId にインデックスを作成する必要があります。実行プランを再度作成すると、両方のテーブルでインデックス シークが実行されます。また、推定サブツリー コストが大幅に削減されます。

私の質問は次のとおりです:

  1. FK は関係制約に役立つほかに、他の有用性がありますか? クエリのパフォーマンスは向上しますか?

  2. すべてのテーブルのすべての FK 列 (Products.CategoryId など) にインデックスを作成する必要がありますか?

ベストアンサー1

外部キーは参照整合性ツールであり、パフォーマンス ツールではありません。少なくとも SQL Server では、FK を作成しても関連するインデックスは作成されないため、検索時間を短縮するにはすべての FK フィールドにインデックスを作成する必要があります。

おすすめ記事