Sql server 在较大的SQL Server上执行查询速度较慢
我有一个查询,在本地机器上需要14秒,但在一个有8个内核和64gb内存的服务器上需要1:30 我在本地计算机上运行SQL Server 2008R2 developer,在服务器上运行64位标准 我已经隔离了查询的一部分,这似乎是导致问题的原因,因为当我将其取出时,查询将在10秒内完成Sql server 在较大的SQL Server上执行查询速度较慢,sql-server,performance,sql-server-2008-r2,Sql Server,Performance,Sql Server 2008 R2,我有一个查询,在本地机器上需要14秒,但在一个有8个内核和64gb内存的服务器上需要1:30 我在本地计算机上运行SQL Server 2008R2 developer,在服务器上运行64位标准 我已经隔离了查询的一部分,这似乎是导致问题的原因,因为当我将其取出时,查询将在10秒内完成 and (ID is null or (ID not in (select ID from Details where
and (ID is null
or (ID not in (select ID
from Details
where (another_ID is not null)
and (yet_another_ID is not null))))
查询的其他几个部分与此非常类似,似乎不会引起问题
查询计划显示为百分比,在两台服务器上几乎相同
请帮助..首先,我将“不在”替换为“不存在”,这可能会提高整体性能并减少逻辑读取 第二,当您提到数据集大小相同时,您的意思是返回的数据集大小相同,还是您正在访问的所有表大小相同?我这样问是因为如果您加入WHERE子句或在WHERE子句中使用的表(例如示例中的详细信息)大得多,这也可能会导致性能问题 我最不愿意想到的是,这些统计数据可能已经过时了。如果是这样,并且您有一个专门的DBA,那么这可能是他们的任务。如果没有可用的DBA,我将开始研究如何刷新您的统计数据。从这里开始: 我和那个网站或网站上的人并没有任何关系,我只是发现很多内容都是彻底的、有帮助的,并且是面向读者的,而不是喋喋不休的技术问题
可能会在评论中留下这个,但rep不够高:)使用执行计划查看SQL Server是否有任何优化查询的建议。这是一个简单的第一步。之后,需要对执行计划进行审查。我将告诉您,子选择几乎总是比连接执行得慢;根据您发布的内容,我认为您应该关闭该子选择。感谢您的回复,但我的问题是两台服务器之间的时间差,而不是查询的总体性能。我知道查询可能会更整洁,但为什么服务器之间存在巨大差异?两台服务器上的数据大小是否相同?这些机器有不同的硬件?机器上运行着不同的进程?您是否排除了缓存的可能性?这不再是一个编程问题,属于dba stack exchange站点。“更大”的SQL Server可能正在运行来自数千个用户的查询,或者具有不同的数据集、不同的索引、不同的统计信息、碎片化/损坏的索引,或者。。。。。。等等等等,谢谢你的回复。更大的服务器几乎没有任何负载,我使用的是完全相同的数据集。当我在服务器上使用execution planner并查看缺少的索引时。有人建议使用一个索引,当应用该索引时,查询速度会比我的本地机器快(仅5秒)。但是,当我尝试查看本地计算机上缺少的索引时,不建议使用相同的索引。有人能解释一下吗?