【发布时间】:2015-05-21 18:54:59
【问题描述】:
我有一张大而薄的桌子,用来记录在活动上花费的时间。
两个表存在活动和记录时间。 Recorded Time 包含一个日期戳,表示所用时间的日期。
我需要获取在某个日期范围内仅记录时间的活动列表。
目前我有构建排除列表并将这些活动存储到临时表中的代码:
DECLARE @DontInclude TABLE (ActivityID INT)
INSERT INTO @DontInclude
SELECT DISTINCT ActivityID
FROM RecordedTime
WHERE DateStamp < @StartDate
INSERT INTO @DontInclude
SELECT DISTINCT ActivityID
FROM RecordedTime
WHERE DateStamp > @EndDate
这样做的问题是,很多数据位于小日期范围之外,因此时间很长。
我不能使用 BETWEEN,因为它不会带回仅在特定日期范围内记录时间的活动。
我已经查看了 Estimate Execution Plan 并创建了 SQL 建议的所有索引。
我的这部分 SP 仍然是瓶颈。任何人都可以建议我可以进行哪些其他更改来提高性能?
【问题讨论】:
-
只是出于好奇,为什么您的@StartDate 大于您的@EndDate?
标签: sql sql-server performance tsql