【发布时间】:2018-09-13 07:15:25
【问题描述】:
在 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 个表的顺序是否重要?
【问题讨论】:
-
用于连接的列应该被索引。
where子句中用于相等条件的列应该被索引。但这些是非常笼统的指导方针,您的问题非常广泛。 -
如果你只是做内部连接,顺序无关紧要。但是,如果您使用
left/right连接,则顺序很重要,因为它从根本上改变了结果集。您可以强制 sql 以特定顺序执行操作,但默认情况下,SQL 会找出它认为最好的任何内容。除非你有充分的理由重写它,否则你应该让它在这方面做它的事情。 -
告诉你的导师,
Employee_Job中的ID完全没用,实际的 Key 是Employee_ID, Job_ID(无论如何都必须定义)。 -
请阅读How to Ask并采取行动,点击谷歌搜索“stackexchange homework”和向下投票箭头鼠标悬停文本。
标签: sql sql-server database indexing database-normalization