2011-09-12 117 views
2

我有两台服务器正在开发,而且我不是DBA,但我们没有一台,所以我试图弄清楚我遇到的一些性能问题。在本地我安装了SQL Server 2008 R2,当我使用的ORM运行查询时,它会在不到一秒的时间内返回结果。当我使用SQL Server 2005在开发服务器上运行完全相同的查询时,需要花费一分多钟。我已经看过两者的执行计划,主要的事情是查询的最后两行有一个order by statement。在2005年的服务器上,这是成本的100%。在2008年的服务器上其成本的0%。我忽略了某种设置吗?两台服务器的数据大致相同,索引/键/等等......因为本地副本只是备份的还原。SQL Server执行计划问题

我最好的猜测是2005服务器正在整理所有表格,然后给我结果(200行)。 2008服务器获得所有结果并对其进行分类。 (200个结果还)

链接放缓执行计划:http://pastebin.com/sUCiVk8j

链接到快速执行计划:http://pastebin.com/EdR7zFAn

我会发布查询,但它是令人讨厌长,因为我有一大堆的包括和其生成查询的实体框架。

预先感谢您。

编辑:我打开SQL服务器上运行的任务管理器,CPU执行此查询期间100%。

编辑:添加到jsfiddle.net的XML版本。由于大小,pastebin不允许我。刚刚使用XML的CSS窗口。

实际2008R2:http://jsfiddle.net/wgsv6/2/ 2005年实际:http://jsfiddle.net/wgsv6/3/

+4

发布执行计划 – JNK

+0

对200个行进行排序不应该对此时间差异负责,因此估计的成本看起来不大。也许统计信息需要在2005服务器上更新。这两个版本计划中显示的成本仅仅是基于这些统计数据的估计值。计划中估计行与实际行之间的任何差异? –

+0

也是这些实际或ESTIMATED执行计划? – JNK

回答

0

很难说没有看到查询,但有可能你缺少缓慢服务器上的索引?

+0

这是可能的,但是OP确实会说“相同的索引/键等”......我会猜测这是三件事之一 - 由于过时的统计数据,参数嗅探或不必要的排序到可怜的运营商选择(这可能是由于上述之一)。但在猜测之前看到实际的计划会很好。 –

+0

啊错过了,不知何故,谢谢。在这种情况下,你列出的其中一件事可能就是它。 – JohnD

0

统计信息可能会过时在dev服务器上。

+0

我问了一个问题后,几小时前我跑了'EXEC sp_updatestats'。它没有改变任何结果。 –