0

这很奇怪。一段简单的代码

        using(SqlConnection
        {//open connection 
            using(SqlCommand
            {//Specified parameters and SP name
                using(SqlDataReader reader = command.ExecuteReader())
                {
                    if (reader.Read())
                    {
                    // Parse it and return an object.

                        return new MyObject
                                   {
                                      prop1 = (int)reader["column1"]
                                      ...

                                      propN=reader["columnn"].ToString()
                     }

执行最多可能需要 3 分钟,而从 Management Studio 执行相同的 SP 运行时间不到一秒!

此代码在另一台服务器上运行。我还发现,如果从代码中执行,Sql Profiler 会报告数百万次读取,而在 Studio 中执行时读取次数少于 5000。

我不知道为什么会这样。任何帮助表示赞赏。PS 执行计划不是绑定到 SP 的,这意味着使用什么客户端运行它没有区别吗?

4

1 回答 1

0

这不是一个真正的答案,但至少它解决了它;)运行 SQL 分析器并捕获执行计划(正如大卫暗示的那样),我发现它们在第一种和第二种情况下有所不同。比我假设的统计/索引可能存在问题 - 优化器的选择非常糟糕。重建索引解决了这个问题,并且两种方式彼此接近(及时)执行。因此,如果您遇到这种情况 - 检查索引碎片和上次更新的统计信息。

于 2013-03-21T20:42:56.440 回答