我正在使用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
答案 0 :(得分:6)
有问题的查询在两种环境中都有相同的查询计划吗?
第一次运行时本地速度是否慢,然后第二次运行速度快? (如果是这样,可能是将页面加载到内存中的物理I / O速度的差异)
作为第一步,我将在两个环境中重建所有索引并更新列统计信息,然后重新比较查询计划:
use myDb
go
exec sp_msforeachtable "dbcc dbreindex('?')"
go
exec sp_msforeachtable "update statistics ? with fullscan, columns"
go
关于生产的常见警告(你说你的数据库很小,所以运行这些命令不需要很长时间)。