【发布时间】:2010-05-04 22:42:17
【问题描述】:
问题:
将DateTime.Now 作为参数传递给proc 是否会阻止SQL Server 缓存查询计划?如果是这样,那么 Web 应用程序是否错过了巨大的性能提升?
可能的解决方案:
我认为DateTime.Today.AddDays(1) 将是一个可能的解决方案。它会将相同的结束日期传递给 sql proc(每天)。并且用户仍然会得到最新的数据。请也谈谈这个。
举个例子:
假设我们有一个存储过程。它将数据报告给网页上的用户。用户可以设置日期范围。如果用户将今天的日期设置为“结束日期”,其中包括今天的数据,则 Web 应用将 DateTime.Now 传递给 sql proc。
假设一位用户多次运行报告--5/1/2010 到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。
【问题讨论】:
标签: sql-server sql-server-2005 caching sql-execution-plan