1

MS SQL 2012 を実行している 2 台の MS SQL サーバーがあります。1 台には 8 GB の RAM、2 つのプロセッサ、および十分なストレージがあります。もう 1 つは、8 つのプロセッサ、64 GB の RAM、データ、プログラム、ログ、および tempdb が分離された複数の接続ドライブを備えています。

通常、クエリでは大きなサーバーの方が高速です。ただし、単純なクエリでは、小さいマシンは 10 秒、もう一方のマシンは 5 分かかります。私たちが判断できる限り、SQL Server の設定は同じで、データも同じで、クエリは両方のマシンで同じです。推定と実際の実行計画は両方のマシンで同じですが、大型のマシンの方が低速です。 . tempdb は、小規模なマシンでは SQL.exe と同じディスク上に 1 つのファイルであり、大規模なマシンでは 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 に答える