复合主键中DateTime列的单独索引

时间:2011-10-24 15:58:45

标签: sql-server-2008

一位同事创建了一个类似于此的表:

EmpID
ShiftStartDateTime
ShiftEndDateTime
PayRate
AnotherColumn
AnotherColumn

主键包括所有列(不知道为什么,我需要与他讨论)。

查询主要涉及对EmpID和StartDateTime列进行过滤。

假设所有列都需要部分主键,是否应在EmpID和StartDateTime列上添加单独的索引?

2 个答案:

答案 0 :(得分:2)

我会在两个字段上添加单个索引。

如果您要过滤的字段是索引中的第一个字段,则该索引仅用于搜索

想想一本电话簿,你很难找到名字叫“John”的人,但是你可以很容易地找到姓氏为“Smith”的人,然后找到该列表中的所有“John”。 您需要第一个密钥才能使用第二个密钥。

如果这两个字段中的一个比另一个更常用,我会先添加它,这样就可以在不包含其他字段的情况下使用它。

答案 1 :(得分:2)

首先,让主键中的所有字段对我来说都很可疑。如果它也是聚簇索引,则在插入/更新记录时会产生很大的开销。通常,您永远不会更新主键的值。至于你的问题,这取决于PK中列的顺序。如果它是EmpID, ShiftStartDateTime,ShiftEndDateTime,PayRate,AnotherColumn, AnotherColumn并且您的查询将按EmpID and StartDateTime过滤,那么将使用此索引,您不需要额外的(这将浪费大量空间)

相关问题