我有一个查询运行从一个Delphi应用程序,突然开始超时后运行完好几个月后超时。进一步,当运行时,它会降低服务器的爬行留下的其他用户认为系统已经崩溃 从Management Studio中运行我停止查询5分多钟纺 服务器ID SQLEXPRESS 2008 R2查询工作几个月现在超时
的现在得罪查询后
SELECT *
FROM SignelOutilsListeJobs_View4
WHERE (CreatedDate > (GETDATE() - 365))
为了让这里有趣的是所需时间&行返回时,我只是改变的天数回。活动监视器似乎没有显示超过查询运行
SELECT *
FROM SignelOutilsListeJobs_View4 -- 00.00.02 38882 ROWS
SELECT *
FROM SignelOutilsListeJobs_View4
WHERE (CreatedDate > (GETDATE() - 600)) -- 00.00.02 16217 ROWS
SELECT *
FROM SignelOutilsListeJobs_View4
WHERE (CreatedDate > (GETDATE() - 500)) -- 00.00.02 13013 ROWS
SELECT *
FROM SignelOutilsListeJobs_View4
WHERE (CreatedDate > (GETDATE() - 200)) -- 00.00.12 4118 ROWS
因此,我想知道这里发生了什么?有任何想法吗?
感谢
第一个猜测:一个坏的查询计划已经得到缓存该查询。 –
...为什么不直接在Delphi代码中预先计算日期限制,然后将其作为查询参数传递?它可能不太容易出错,允许轻松地重复使用具有各种偏移量的相同单个语句,并且还与所有数据库后端兼容... –
不是性能挑战的答案,但应该使用DATEADD而不是数学快捷方式。很明显你在做什么,不依赖于可能改变的违约行为。 DATEADD(day,-200,getdate()) –