爲什麼存儲過程返回一個包含9列的表,使用此代碼的89行需要60秒才能執行(.NET 1.1),這需要在SQL Server Management Studio中運行1秒鐘的時間?它被在本地機器上運行,因此很少/沒有網絡延遲,快速dev的機器SqlDataAdapter.Fill方法緩慢
Dim command As SqlCommand = New SqlCommand(procName, CreateConnection())
command.CommandType = CommandType.StoredProcedure
command.CommandTimeout = _commandTimeOut
Try
Dim adapter As new SqlDataAdapter(command)
Dim i as Integer
For i=0 to parameters.Length-1
command.Parameters.Add(parameters(i))
Next
adapter.Fill(tableToFill)
adapter.Dispose()
Finally
command.Dispose()
End Try
我放慢參數數組類型(對於此SQL,這只是一個參數)
parameters(0) = New SqlParameter("@UserID", SqlDbType.BigInt, 0, ParameterDirection.Input, True, 19, 0, "", DataRowVersion.Current, userID)
存儲的過程只喜歡一個select語句這樣:
ALTER PROC [dbo].[web_GetMyStuffFool]
(@UserID BIGINT)
AS
SELECT Col1, Col2, Col3, Col3, Col3, Col3, Col3, Col3, Col3
FROM [Table]
這是一個古老的問題,許多人找到它。在開始清理緩存並使用ARITHABORT設置進行遊戲之前,請閱讀Erland Sommarskog的綜合文章,該文章解釋了可能發生的情況:[緩慢的應用程序,SSMS中的快速?瞭解性能之謎](http://www.sommarskog.se/query-plan-mysteries.html)很多時候,這種行爲是由稱爲「參數嗅探」的SQL Server功能引起的。 – 2016-05-26 23:59:07