我使用以下方法來粗略估量經過的時間來執行通過SSMS(SQL Server Management Studio中)的存儲過程:爲什麼DATEDIFF在第一次執行後將結果加倍?
USE [MyDB]
GO
DECLARE @t1 DATETIME;
DECLARE @t2 DATETIME;
SET @t1 = GETDATE();
DECLARE @TTIdsList dbo.TTIdsList_ident
INSERT INTO @TTIdsList(Id)
VALUES (7890137988314100)
DECLARE @return_value int
EXEC @return_value = [mySCH].[DataLoadByList]
@CaseIds = @TTIdsList
SELECT 'Return Value' = @return_value
SET @t2 = GETDATE();
SELECT DATEDIFF(microsecond,@t1,@t2) AS elapsed_us;
GO
它工作得很好,但它返回的第一個執行一個不同的結果(3000微秒) 。在所有後續執行中,它返回雙精度:6000微秒。
我錯過了這些變量初始化的方式嗎?如果是這樣,我錯過了什麼?
它可能是編譯時間爲你使用存儲過程。爲了測試這個建議,在'EXEC ...'和'SET @ t2'之前將'SET @ t1'移到右邊,看看會發生什麼。 –
@ZoharPeled我完全按照你所說的做了,並且我仍然得到相同的結果:第一次運行3000微秒,第二次,第三次,第四次以及隨後的任何運行都是6000微秒。順便說一句,每次我重命名'elapsed_us',它會回到3000微秒(我認爲這是正確的值)。奇怪的。 – datps
所以這是存儲過程的編譯時間。驗證您是否可以在存儲過程中添加「RECOMPILE」提示。如果我是正確的,你會發現時間在3000微秒內穩定。 –