在3NF(SQL Server)数据库中,应该将哪些列编入索引(群集和非群集)以提高搜索效率?
考虑以下情况:
表1:员工
列:ID,EmployeeSerial,... columnN
表2:工作
列:ID,JobCode,... columnN
表3:Employee_Job
列:ID,Employee_ID,Job_ID
其他:
后续问题:为了获得推荐的索引方案的优势,在选择查询中是否加入了3个表的顺序?
答案 0 :(得分:-1)
每个id
都应该是主键,从而创建索引。
然后,您的典型查询将是:
select . . .
from employee e join
employee_job ej
on ej.employee_id = e.id join
job j
on ej.job_id = j.id
where e.serial = ?/j.job_code ?;
对于此类查询,您需要employee(serial, id)
,employee_job(employee_id, job_id)
,job(job_code, id)
和employee_job(job_id, employee_id)
上的其他(非主键)索引。
from
子句中表的顺序影响不大 - 三个表都没有。 SQL Server的优化器在优化连接时确实有限制,但应始终使用相关索引,因此我认为您是安全的。