我有表「產品」300,000行,「Imported_Products」4,000行。此外,我還查看了基於「Imported_Products」的「View_Imported_Products」,以使其格式良好。UPDATE在SQL Server上花費很長時間
當我運行UPDATE:
UPDATE Products SET DateDeleted = GETDATE()
WHERE Suppiler = 'Supplier1' AND SKU NOT IN (SELECT SKU FROM View_Imported_Products)
這需要大量的時間,即使我運行它第二次,且行更新約1分鐘。
我增加了對Products.SKU和View_Imported_Products.SKU非聚集索引,也改變了我NOT IN到NOT EXISTS
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秒運行。
我在做什麼錯了,以及如何改進該更新以便快速運行。
感謝任何幫助。
謝謝
修訂
- SELECT SKU的View_ImportedProducts - 運行速度非常快,它需要00:00:00秒
- 更改的查詢使用LEFT JOIN,而不是NOT 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