1
我有一个由许多列组成的表,其中包括两个日期(startDate和endDate)。两个日期之间的MSSQL索引
该表包含15.000.000条记录。
我的查询是这样的
SELECT ID FROM table WHERE @inputdate BETWEEN startDate and endDate
设置我的指标应该如何进行设置,以最大限度地提高性能?
我有一个由许多列组成的表,其中包括两个日期(startDate和endDate)。两个日期之间的MSSQL索引
该表包含15.000.000条记录。
我的查询是这样的
SELECT ID FROM table WHERE @inputdate BETWEEN startDate and endDate
设置我的指标应该如何进行设置,以最大限度地提高性能?
将我的评论延伸至答案。
CREATE UNIQUE NONCLUSTERED INDEX
[UIX_TABLE_StartDateEndDate]
ON [dbo].[TABLE]
([StartDate] ASC, [EndDate] ASC)
INCLUDE([ID])
是一个好的开始。为了最大限度地提高性能,你必须分析负载,也许你可以改善它与微小的tweeks,如设置填充因子填充等。
从开始的另一个不错的选择是如果您的日期列可以为空,并且您从不搜索空值。可以应用过滤器的索引等
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)
创建独特的非聚集索引[UIX_TABLE_StartDateEndDate] ON [DBO] [表]([开始日期] ASC,[结束日期] ASC)包括:([ID])是这样一个好的开始。为了最大限度地提高性能,您必须分析负载,也许您可以通过较小的推文来改善它 – jean
告诉我们更多关于您的数据的信息。开始和结束之间的时间间隔是多少?它是有限的吗(例如,在同一天,同一周或同一周)或者它可以是任何东西,比如几年? – Ben