我的本地计算机上有一个查询需要14秒,但是在8核和64GB内存的服务器上需要1:30。
我在本地计算机上运行SQL Server 2008R2开发人员,在服务器上运行64位标准版。
我已经隔离了查询的一部分,这似乎导致了问题,因为当我解决这个问题时,查询在10秒内完成。
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))))
查询的其他几个部分与此非常相似,似乎不会导致问题。
查询计划显示为百分比,并且在两台服务器上几乎相同。
请帮助..
答案 0 :(得分:0)
首先,我会将“NOT IN”替换为“NOT EXISTS”,这可能会提升整体性能并减少逻辑读取。
其次,当您提到数据集大小相同时,您的意思是数据集RETURNED的大小是相同的,还是您访问的所有表都是相同的大小?我问,因为如果你加入或使用WHERE子句中的表(例如你的例子中的详细信息)明显更大,这也可能导致性能问题。
我想到的最后一件事是统计数据可能是陈旧的。如果是这种情况并且您拥有专用的DBA,那么它可能是一项任务。如果没有可用的DBA,我会开始研究如何更新您的统计数据。一个地方开始在这里: https://www.simple-talk.com/sql/performance/managing-sql-server-statistics/
我与该网站或其他人没有任何联系,我刚刚发现很多内容是彻底的,有用的,并且是为了教导读者而不是喷出技术喋喋不休。
会在评论中留下这个,但代表不够高:)