我们有两个运行MS SQL 2012的MS SQL服务器。一个有8GB RAM,2个处理器和足够的存储空间。另一个有8个处理器,64GB RAM,多个连接驱动器,数据,程序,日志和tempdb分开。
通常,大型服务器的查询速度更快。但是,在一个简单的查询中,小型机器需要10秒钟而另一台机器需要5分钟。据我们所知,SQL Server设置是相同的,数据是相同的,两台机器上的查询是相同的,两台机器上的估计和实际执行计划是相同的,但是大机器比较慢。 Tempdb是与小型机器上的SQL.exe在同一磁盘上的一个文件,并且在大型机器的SSD驱动器上的tempdb中有8个文件。
我们可以采取哪些步骤来确定为什么大型机器上的查询速度比较小的机器慢?
查询是:
SELECT field1, field2
FROM lookuptable1
WHERE field2 <> ''
AND field1 not in (SELECT field1
FROM lookuptable2
)
我们有16个线程用于大型机器上的并行任务,4个用于小型机器上。查询不返回任何值(预期),但更大的机器更慢。统计数据已重建,查询计划已刷新。
答案 0 :(得分:-1)
测试是否存在(vs IN)可能会产生影响。
SELECT field1, field2
FROM lookuptable1 outerTableAlias
WHERE field2 <> ''
AND not exists (SELECT *
FROM lookuptable2 innerTable where innerTable.field1 = outerTableAlias.field1 )
)
尝试不带“field2&lt;&gt;''”的查询。这对于table_scan来说是一个非常可疑的地方。