我有下表结构,一个部门可以有很多员工。
Department
id
dept_name
...
Employee
id
emp_name
dept_id(foreign key to department table)
....
考虑一下我有 30 个部门,每个部门都有 10k 条记录。
现在我在查询下面开火
select * from department dept, Employee emp where emp.dept_id=dept.id and dept.id=10;
我的问题是在表 Employee 的外键列 dept_id 上创建索引有什么好处吗?
根据我的理解,在列 dept_id 上创建索引应该有好处,因为没有索引 DBMS 必须扫描 Employee 表的所有记录才能找到 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