问题:
DateTime.Now
作为参数传递给 proc 是否会阻止 SQL Server 缓存查询计划?如果是这样,那么 Web 应用程序是否错过了巨大的性能提升?
可能的解决方案:
我认为DateTime.Today.AddDays(1)
这将是一个可能的解决方案。它会将相同的结束日期传递给 sql proc(每天)。并且用户仍然会得到最新的数据。请也谈谈这个。
给定示例:
假设我们有一个存储过程。它将数据报告给网页上的用户。用户可以设置日期范围。如果用户将今天的日期设置为“结束日期”,其中包括今天的数据,则 Web 应用程序将传递DateTime.Now
给 sql proc。
假设一个用户多次运行报告5/1/2010
--to-- now
。在网页上,用户5/1/2010
看到5/4/2010
. 但是 Web 应用程序DateTime.Now
作为结束日期传递给 sql proc。因此,过程中的结束日期总是不同的,尽管用户正在查询类似的日期范围。
假设表中的记录数和用户数很大。因此,任何性能提升都很重要。因此问题的重要性。
过程和执行示例(如果这有助于理解):
CREATE PROCEDURE GetFooData
@StartDate datetime
@EndDate datetime
AS
SELECT *
FROM Foo
WHERE LogDate >= @StartDate
AND LogDate < @EndDate
这是使用 DateTime.Now 的示例执行:
EXEC GetFooData '2010-05-01', '2010-05-04 15:41:27' -- passed in DateTime.Now
这是使用 DateTime.Today.AddDays(1) 的示例执行
EXEC GetFooData '2010-05-01', '2010-05-05' -- passed in DateTime.Today.AddDays(1)
两个过程返回相同的数据,因为当前时间是:2010-05-04 15:41:27
。