大量記錄的有效方式考慮這個查詢刪除在SQL Server
Delete from T1 where T1.ID in (select ID from T2)
T1和T2是數以百萬計的記錄的順序大量的表。
T1是「活」表,T2是「存檔」表。在我們將記錄從T1複製到T2之後,我們想從T1中清除它。使用多個索引對T1進行讀取優化。
執行此操作的有效方法是什麼?
我在.net環境中,所以基於代碼的解決方案也可以工作。
大量記錄的有效方式考慮這個查詢刪除在SQL Server
Delete from T1 where T1.ID in (select ID from T2)
T1和T2是數以百萬計的記錄的順序大量的表。
T1是「活」表,T2是「存檔」表。在我們將記錄從T1複製到T2之後,我們想從T1中清除它。使用多個索引對T1進行讀取優化。
執行此操作的有效方法是什麼?
我在.net環境中,所以基於代碼的解決方案也可以工作。
對於數據庫的性能,最好刪除批記錄,以便鎖定最小化。
DELETE TOP (1000)
FROM T1
WHERE T1.ID IN (SELECT ID
FROM T2)
您可以優化的被刪除的記錄數。
,直到沒有記錄被刪除
在大多數情況下, ,對於大量的行,EXISTS和INNER JOIN優於IN(SELECT ..),並且經常存在優於INNER JOIN
我檢查了IN(SELECT)和EXISTS的查詢計劃 - 它們完全一樣。運行時間有什麼不同? –
您可能具有相同的運行時間,但如果添加更多數據,將來可能會更改執行計劃,因此差異可能會很大。根據我的經驗(以及我在網上閱讀的內容),選擇的順序是EXISTS,然後是INNER JOIN,然後是IN。如果你是批量更新,使用哪種方法並不重要。 – Anton