当在 SQL Server Management Studio 中执行时,我有一个查询(大约 1600 行存储为存储过程),执行大约需要 3 秒(通过添加正确的索引对其进行优化后)。
我在 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 Profiler 并收集了一些统计数据。这就是我正在观察的。很奇怪,它是正在执行的确切查询。让我知道此时我还能做些什么。