一位同事创建了一个类似于此的表:
EmpID
ShiftStartDateTime
ShiftEndDateTime
PayRate
AnotherColumn
AnotherColumn
主键包括所有列(不知道为什么,我需要与他讨论)。
查询主要涉及对EmpID和StartDateTime列进行过滤。
假设所有列都需要部分主键,是否应在EmpID和StartDateTime列上添加单独的索引?
答案 0 :(得分:2)
是
我会在两个字段上添加单个索引。
如果您要过滤的字段是索引中的第一个字段,则该索引仅用于搜索。
想想一本电话簿,你很难找到名字叫“John”的人,但是你可以很容易地找到姓氏为“Smith”的人,然后找到该列表中的所有“John”。 您需要第一个密钥才能使用第二个密钥。
如果这两个字段中的一个比另一个更常用,我会先添加它,这样就可以在不包含其他字段的情况下使用它。
答案 1 :(得分:2)
首先,让主键中的所有字段对我来说都很可疑。如果它也是聚簇索引,则在插入/更新记录时会产生很大的开销。通常,您永远不会更新主键的值。至于你的问题,这取决于PK中列的顺序。如果它是EmpID, ShiftStartDateTime,ShiftEndDateTime,PayRate,AnotherColumn, AnotherColumn
并且您的查询将按EmpID and StartDateTime
过滤,那么将使用此索引,您不需要额外的(这将浪费大量空间)