我正在爲每小時運行一次的ETL腳本創建一個存儲過程,以向用戶提供特定操作的結果。加速更新語句T-SQL with Top 1
我需要找到當前結果的前一個結果。這很好,我有一個工作查詢,我可以導出到Excel中。但是現在我想讓這個過程自動化。
存儲過程平均每次運行42秒。在服務器上每小時運行一次時,這是不可行的,因爲我還有其他自動化腳本也在運行。
我的問題是28秒內存儲過程平均值的一部分,而其他部分通常不到一秒鐘(在SSMS中00:00:00出現)。
我已經設法減少其他塊的運行時間,我自己把它平均減少到42秒,但我不能這樣做。
我想知道你們中的任何人是否知道任何特定的方法來加速這個小塊?
UPDATE #tmp
SET prev_test_date = (
SELECT TOP 1 r.test_date
FROM [dbo].[results] r (NOLOCK)
WHERE r.number = #tmp.number
AND r.test_date < #tmp.test_date
ORDER BY r.test_date DESC
)
我本來打算用由於查詢的TOP 1份加入該加快步伐,雖然我不能做到這一點。
任何想法?
我有一種感覺,你扔在那裏的NOLOCK提示「加快速度」。該查詢提示不是一個快速按鈕。它有一些非常嚴重的副作用。在使用之前,您需要充分理解該提示。 http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/ –
我添加了它,因爲我們不介意弄髒結果,它會加快速度。 – Paul
這遠不止是髒讀。在你把這個提示潑到整個地方之前,你真的應該閱讀那篇文章。有時間是合適的,這可能是其中之一,但很多人認爲這只是髒讀。 –