1

我们有两台运行 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 个线程。该查询不返回任何值(预期),但使用更大的机器会慢得多。统计信息已重建,查询计划已刷新。

4

1 回答 1

-1

测试是否存在(与 IN 相比)可能会有所不同。

SELECT field1, field2 
FROM lookuptable1 outerTableAlias
WHERE field2 <> '' 
AND not exists (SELECT * 
    FROM lookuptable2 innerTable where innerTable.field1 = outerTableAlias.field1 )

)

尝试不带“field2 <> ''”的查询。对于 table_scan,这将是一个高度可疑的地方。

于 2015-01-21T14:23:48.330 回答