我有一個查詢運行從一個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()) –