两个日期之间的MSSQL索引

时间:2015-11-16 13:07:53

标签: sql-server

我有一个包含许多列的表,其中包括两个日期(startDate和endDate)。

该表包含15.000.000条记录。

我的查询是这样设置的

SELECT ID FROM table WHERE @inputdate BETWEEN startDate and endDate

如何设置我的索引以最大限度地提高性能?

1 个答案:

答案 0 :(得分:2)

将我的评论扩展到答案。

CREATE UNIQUE NONCLUSTERED INDEX
[UIX_TABLE_StartDateEndDate]
 ON [dbo].[TABLE]
 ([StartDate] ASC, [EndDate] ASC)
 INCLUDE([ID])

是一个好的开始。为了最大限度地提高性能,您必须对负载进行分析,也许您可​​以通过设置fillfactor padding等小调整来改进它。

从开始的另一个好选择是,如果您的日期列可以为空,并且您从不搜索空值。这样您就可以将过滤器应用于索引,如

CREATE UNIQUE NONCLUSTERED INDEX
    [UIX_TABLE_StartDateEndDate]
     ON [dbo].[TABLE]
     ([StartDate] ASC, [EndDate] ASC)
     INCLUDE([ID])
WHERE ([StartDate] IS NOT NULL AND [EndDate] IS NOT NULL)