我有一個查詢(大約1600行存儲爲存儲過程),在SQL Server Management Studio中執行時需要大約3秒鐘的時間執行(通過添加正確的索引進行優化後)。查詢在SQL Server中直接在4秒內執行,但在ASP.NET中需要超過30秒?
我在C#中爲此編寫了一個包裝,並提供了使用URI執行此查詢的功能。但是,這需要超過30秒的時間才能執行,因此,當我將此查詢作爲循環的一部分運行時,瀏覽器由於有太多未決請求而停頓。我寫了這樣的包裝:
try
{
string ConString = Constants.connString;
using (con = new SqlConnection(ConString))
{
cmd = new SqlCommand(sql, con);
con.Open();
dr = cmd.ExecuteReader();
while (dr.Read())
{
...
}
}
}
我的連接字符串是:
Data Source={0};Initial Catalog={1};Integrated Security=True;MultipleActiveResultSets=true
我知道查詢本身是好的,因爲我碰到這裏面SSMS多次,它工作得很好(下平均5秒)。而且,我很樂意提供更多的調試信息,除了我不知道該提供什麼。
要解決這些問題,我會從哪裏開始?
編輯:
我跑SQL事件探查器,並收集了一些統計數據。這就是我所觀察到的。很奇怪,它是正在執行的確切查詢。讓我知道在這一點上我還有什麼可以做的。
在哪條線和哪條線之間需要30秒? – 2013-02-26 20:35:46
@MikeChristensen:它停在'cmd.ExecuteReader()'處。 – Legend 2013-02-26 20:36:50
你是說SQL命令字符串是1600行,還是說它返回1600行? – RBarryYoung 2013-02-26 20:37:02