【发布时间】:2010-09-20 00:37:24
【问题描述】:
为什么使用此代码返回包含 9 列、89 行的表的存储过程需要 60 秒来执行(.NET 1.1),而在 SQL Server Management Studio 中运行需要
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)
存储过程只是一个这样的选择语句:
ALTER PROC [dbo].[web_GetMyStuffFool]
(@UserID BIGINT)
AS
SELECT Col1, Col2, Col3, Col3, Col3, Col3, Col3, Col3, Col3
FROM [Table]
【问题讨论】:
-
我遇到了同样的问题并使用这篇文章解决了它:databasejournal.com/features/mssql/article.php/3841271/…
-
这对我有用,因为我的存储过程会根据参数进行一些分支。
-
这是一个老问题,很多人都发现了。在开始清理缓存和使用 ARITHABORT 设置之前,请阅读 Erland Sommarskog 的综合文章,该文章解释了可能发生的情况:Slow in the Application, Fast in SSMS? Understanding Performance Mysteries 这种行为通常是由 SQL Server 的“参数嗅探”功能引起的。跨度>
标签: sql-server vb.net .net-1.1