外部キーは自動的にインデックスを作成しますか? 質問する

外部キーは自動的にインデックスを作成しますか? 質問する

2 つのテーブルに外部キーを設定すると、SQL Server によって子テーブルにインデックスのようなものが作成されると言われています。これが本当だとは信じがたいのですが、これに関する具体的な情報はあまり見つかりません。

私がこの質問をする本当の理由は、おそらく 15 個の関連テーブルがあるテーブルに対する削除ステートメントで、応答時間が非常に遅いことが起こっているからです。データベース担当者に聞いたところ、フィールドに外部キーがある場合は、インデックスのように動作するとのことでした。これについて、皆さんはどう思われますか? すべての外部キー フィールドにインデックスを追加する必要がありますか、それとも不要なオーバーヘッドになるだけですか?

ベストアンサー1

外部キーは制約であり、2 つのテーブル間の関係であり、インデックス自体とは何の関係もありません。

ただし、外部キー関係の一部であるすべての列にインデックスを付ける方が合理的です。FK 関係では、関連するテーブルを検索し、単一の値または値の範囲に基づいて特定の行を抽出する必要があることがよくあります。

したがって、FK に関係するすべての列にインデックスを付けるというのは理にかなっています。ただし、FK 自体はインデックスではありません。

キンバリー・トリップの素晴らしい記事をご覧ください「SQL Server が外部キー列にインデックスを付けなくなったのはいつですか?」

2023年5月31日更新
今これを読んでいる人のために、私(元の投稿者)はMarcの素晴らしい回答を更新して、Entity Framework Coreについて指摘したいと思いました。インデックスを自動生成するようになりました慣例により検出された外部キー用。非常に役に立ちます。この機能がどのくらい前から存在しているかはわかりませんが、私は EF Core 7 を使用しています。

おすすめ記事