【发布时间】:2010-10-06 00:22:27
【问题描述】:
编辑:我添加了“Slug”列来解决特定记录选择的性能问题。
我的表格中有以下列。
Id Int - Primary key (identity, clustered by default)
Slug varchar(100)
...
EntryDate DateTime
大多数时候,我是按 EntryDate 来订购 select 语句,如下所示。
Select T.Id, T.Slug, ..., T.EntryDate
From (
Select Id, Slug, ..., EntryDate,
Row_Number() Over (Order By EntryDate Desc, Id Desc) AS RowNum
From TableName
Where ...
) As T
Where T.RowNum Between ... And ...
我按 EntryDate 和 Id 排序,以防有重复的 EntryDates。
当我选择 A 记录时,我会执行以下操作。
Select Id, Slug, ..., EntryDate
From TableName
Where Slug = @slug And Year(EntryDate) = @entryYear
And Month(EntryDate) = @entryMonth
我有一个独特的 Slug 和 EntryDate 键。
在我的情况下,什么是键和索引的明智选择?我面临性能问题可能是因为我按未聚集索引的列排序。
是否应该将 Id 设置为非聚集主键并将 EntryDate 设置为聚集索引?
感谢您的所有帮助。谢谢。
编辑:
我没有尝试在 EntryDate 上添加非聚集索引。从后端插入的数据,因此插入的性能对我来说没什么大不了的。此外,EntryDate 并不总是插入日期。它可以是过去的日期。后端用户选择日期。
【问题讨论】:
标签: sql-server-2005 performance primary-key clustered-index