这是一张表:
CREATE TABLE Meetings
(
ID int PRIMRY KEY IDENTITY(1,1)
StartDate DateTime NOT NULL,
EndDate DateTime NULL,
Field1 varchar(50),
Field2 varchar(50),
Field3 varchar(50),
Field4 varchar(50)
)
有几千行。数据范围可以是不同的大小(从几天到 50 年)。
这是一个查询:
DECLARE @ApplicableDate DateTime
SELECT ID, StartDate, EndDate, Field1, Field2, Field3, Field4
FROM Meetings
WHERE StartDate <= @ApplicableDate AND
(EndDate is null || @ApplicableDate <= EndDate)
由于日期范围可能很大,因此可能会返回表的大部分(20%-50% 的行)。
查询以简单的方式表示我想要的行,但性能很差。无论我添加什么索引,它都会进行聚集索引扫描。我试过了:
- 开始日期
- 开始日期,结束日期
如何提高此查询的性能?
我已经查看了这个问题和这个问题的答案。这些解决方案对我的情况没有帮助 - 我真的不想通过创建一个单独的日期表来将查询转换为相等查询(修改结束日期或为空时会发生什么情况? ),或者通过变形数据以适应空间索引。
不过,我对可能对数据结构进行的修改持开放态度(特别是如果它们不添加行,也不使用奇怪的数据类型)..