web-dev-qa-db-ja.com

外部キー列にインデックスを作成しますか?

1つの部門が多くの従業員を持つことができる以下のテーブル構造があります。

Department
    id
    dept_name
    ...

Employee
   id
   emp_name
   dept_id(foreign key to department table)
   ....

30の部署があり、各部署に1万件のレコードがあるとします。

今私はクエリの下で発砲します

select * from department dept, Employee emp where emp.dept_id=dept.id and dept.id=10;

私の質問は、テーブルEmployeeの外部キー列dept_idにインデックスを作成することで何か利点があるのですか?

私の理解によれば、dept_id列にインデックスを作成すると、DBMSが従業員テーブルのすべてのレコードをスキャンしてdept_id = 10を見つける必要があるため、インデックスを作成する利点があります。インデックスがある場合、非クラスター化インデックスを使用して、dept_id = 10のレコードの範囲をすばやく見つけることができます。

1
user3198603

Employee.dept_idにインデックスを作成することを強くお勧めします。

このようなSELECTステートメントは大幅に改善されるはずです。さらに重要なのは、更新時にインデックスが作成されることです。トランザクションが完了するまで、テーブル全体をロックする(他のセッションを強制的に待機させる)ことができます。

詳細はこちら: https://asktom.Oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:292016138754

2