テーブル「製品」300,000行と「Imported_Products」4,000行があります。また、私はView_Imported_Productsというビューを持っています。これは "Imported_Products"に基づいて整形式になっています。SQL ServerでUPDATEに長時間かかる
私はUPDATEを実行すると:
UPDATE Products SET DateDeleted = GETDATE()
WHERE Suppiler = 'Supplier1' AND SKU NOT IN (SELECT SKU FROM View_Imported_Products)
をそれは私がそれを実行しても、2回目がないの行を更新約1分の時間がかかります。
また、私は、NOTにしないで変更し、Products.SKUとView_Imported_Products.SKU上の非クラスタ化インデックスを追加
UPDATE Products SET DateDeleted = GETDATE() FROM Products P
WHERE Supplier = 'Supplier1' AND NOT EXISTS (SELECT SKU FROM View_Imported_Products I WHERE P.SKU=I.SKU)
を存在しますが、それはまだ実行に約16秒かかりました。
私が間違っていること、およびその更新プログラムを改善して速く実行する方法
ありがとうございました。
は
がView_ImportedProducts FROM
- SELECT SKUを更新しましたありがとう - 非常に速く走る、それは、JOINをLEFTを使用するには、午後十二時00分00秒秒
- 変更したクエリーを取る代わりに、EXISTSません - あまり役に立たない
実行に時間がかかりますSELECT * FROM Products AS P WHERE P.Supplier = 'Supplier1' AND DateDeleted IS NULL AND NOT EXISTS ( SELECT SKU FROM View_ImportedProducts AS I WHERE P.SKU = I.SKU )
あなたは本当にビューを使用する必要がありますか?あなたは 'Imported_Products'を直接使用できませんか? – Lamak
実行計画はどのように見えますか?更新しようとしているレコードの数はいくつですか?更新しているレコードの値にインデックスがありますか? – Igor
商品表には索引付けされたビューまたは同様のものがありますか? – jabs