1 つのステートメントが完了するまでに合計時間 (10 分) の 95% を費やしている SQL ストアド プロシージャがあります。#Records
約 133,000 行あり、Records
約 12,000 行あります。
-- Check Category 1 first
UPDATE #Records
SET Id = (SELECT TOP 1 Id FROM Records WHERE Cat1=#Records.Cat1)
WHERE Cat1 IS NOT NULL
Cat1
inにインデックスを追加してみました#Records
が、ステートメント時間は改善されませんでした。
CREATE CLUSTERED INDEX IDX_C_Records_Cat1 ON #Records(Cat1)
次の同様のステートメントは、わずかな時間しかかかりません。
-- Check Category 2
UPDATE #Records
SET Id = (SELECT TOP 1 Id FROM Records WHERE Cat2=#Records.Cat2)
WHERE ID IS NULL
なぜこれが起こっているのか、またはこの声明をより効果的にするために何ができるかについてのアイデアはありますか?
前もって感謝します。
これを Microsoft SQL Server 2005 で実行しています。