为什么SQL Server 2008对Localhost的查询比远程服务器慢得多?

Jon*_*ell 2 sql-server database-connection sql-server-2008

我正在使用SQL Server 2008作为后端的应用程序.在每天结束时,我备份数据库并将其恢复到我的笔记本电脑上,以便我可以在家继续开发.在这两种设置中,一切都运行良好,除了在本地计算机上运行的查询比我在工作时查询远程服务器时花费的时间要长得多(几秒钟到亚秒).

我按名称指定服务器并使用"." 连接到我的本地实例.该应用程序是使用集成安全性通过ADO连接的Excel VBA.

我不知道服务器的工作规格,但我认为它们比我的笔记本电脑更好,所以这可能解释了一些不同之处.但是,我的开发笔记本电脑是不错的(Windows 7,2.4GHz Core i5,64位,8GB RAM),此时数据库非常小.

为什么表现会如此显着不同?我应该在笔记本电脑上看一下如何提高性能?

编辑:事实证明,查询没有错.在我的笔记本电脑上往返服务器以获取数据需要花费更长的时间,我错误地认为这是查询,而实际上是连接.当我通过SSMS连接到数据库引擎时,在任一环境中都需要大约相同的时间,但是当我使用ADO进行连接时,连接就是本地更长的时间.知道什么会导致这种延迟吗?

我将Mitch的回复标记为答案(有助于排查查询时间和环境的差异),并将创建有关连接延迟的新问题.

更新:这是关于我在SE.DBAs上的问题的链接,关于localhost连接的可怕性能:https://dba.stackexchange.com/q/18231/2848

Mit*_*eat 6

有问题的查询在两种环境中都有相同的查询计划吗?

第一次运行时是否在本地缓慢,然后在第二次运行时快速?(如果是这样,可能是将页面加载到内存中的物理I/O速度的差异)

作为第一步,我将重建所有索引并更新两个环境中的列统计信息,然后重新比较查询计划:

use myDb
go

exec sp_msforeachtable "dbcc dbreindex('?')" 
go

exec sp_msforeachtable "update statistics ? with fullscan, columns" 
go
Run Code Online (Sandbox Code Playgroud)

关于生产的常见警告(你说你的DB很小,所以运行这些命令不需要很长时间).