从代码到直接查询的命令执行时间

时间:2013-03-20 18:00:05

标签: .net sql-server-2008

这很奇怪。一段串联的代码

        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次读取。

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

1 个答案:

答案 0 :(得分:0)

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