规范化数据库中查找表的有效索引

时间:2018-04-03 20:47:20

标签: sql sql-server database indexing database-normalization

在3NF(SQL Server)数据库中,应该将哪些列编入索引(群集和非群集)以提高搜索效率?

考虑以下情况:
表1:员工
   列:ID,EmployeeSerial,... columnN
表2:工作
   列:ID,JobCode,... columnN
表3:Employee_Job
   列:ID,Employee_ID,Job_ID

其他:

  • 列“ID”是自动递增的数字主键 每个表,但没有商业价值(将其视为记录 数)。它的唯一目的是加入Employee和Job表。
  • 执行的大多数查询都需要来自Employee和Job的数据 表,将EmployeeSerial和JobCode中的任何一个或两者指定为 “WHERE”条款中的条件。

后续问题:为了获得推荐的索引方案的优势,在选择查询中是否加入了3个表的顺序?

1 个答案:

答案 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的优化器在优化连接时确实有限制,但应始终使用相关索引,因此我认为您是安全的。