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のレコードの範囲をすばやく見つけることができます。
Employee.dept_id
にインデックスを作成することを強くお勧めします。
このようなSELECTステートメントは大幅に改善されるはずです。さらに重要なのは、更新時にインデックスが作成されることです。トランザクションが完了するまで、テーブル全体をロックする(他のセッションを強制的に待機させる)ことができます。
詳細はこちら: https://asktom.Oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:292016138754