a
table 内に列があり、 への外部キーである列をFoo
含む新しいテーブルを作成する場合、列は自動的に に対してインデックス付けされますか、または ですべての行を効率的に検索したい場合は、それでもインデックスを作成する必要がありますか?Bar
b
Foo.a
b
Bar
Bar.b
Bar
b = 1
(問題があれば、私は SQLite を使用しています。)
外部キーは、「テーブル間の既存の関係を強制する」ためにのみ使用されますが、関連する列のインデックスに基づいて自動的にインデックスが作成されるわけではありません。インデックスを作成すると でのFoo.a
挿入/更新が高速化されBar.b
、インデックスを作成すると でのBar.b
選択が高速化されBar.b
ます。
SQLite で外部キーを作成すると、制約が作成されるだけです。インデックスは自分で作成する必要があります。
ドキュメントから、パラグラフ3の終わり近く:
したがって、ほとんどの実際のシステムでは、各外部キー制約の子キー列にインデックスを作成する必要があります。
インデックスは自分で作成する必要があります。少なくとも、それを自動的に行う DBMS は知りません。