我有一个包含许多列的表,其中包括两个日期(startDate和endDate)。
该表包含15.000.000条记录。
我的查询是这样设置的
SELECT ID FROM table WHERE @inputdate BETWEEN startDate and endDate
如何设置我的索引以最大限度地提高性能?
答案 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)