我想知道最好的做法是什麼,當你有一個大的ID列表,並且你需要刪除列表中不包含ID的行。刪除id不在(非常大)列表中的行 - 最佳實踐?
在我看來,喜歡去使用「不」特性的方式:
DELETE FROM Foo
WHERE ID NOT IN (1, 2, 3,... 20000)
但我不知道該如何解決性能兼容,當您的名單是相當大的。
有關如何做到這一點的任何建議嗎?
我想知道最好的做法是什麼,當你有一個大的ID列表,並且你需要刪除列表中不包含ID的行。刪除id不在(非常大)列表中的行 - 最佳實踐?
在我看來,喜歡去使用「不」特性的方式:
DELETE FROM Foo
WHERE ID NOT IN (1, 2, 3,... 20000)
但我不知道該如何解決性能兼容,當您的名單是相當大的。
有關如何做到這一點的任何建議嗎?
您可以創建並填寫一個臨時表,然後用NOT IN
,NOT EXISTS
或LEFT OUTER JOIN
:
CREATE TABLE #foo(id INT)
INSERT #foo VALUES(1)
INSERT #foo VALUES(2)
INSERT #foo VALUES(3)
INSERT #foo VALUES(4)
INSERT #foo VALUES(5)
INSERT #foo VALUES(6)
INSERT #foo VALUES(20000)
WHILE @@rowcount > 0
BEGIN
DELETE TOP (100) FROM Foo WHERE NOT EXISTS (SELECT 1 FROM #foo f WHERE f.Id = Foo.ID)
END
相關:How would I create a temp table in SQL Server when I have a big list of ID's
填寫一個臨時表 –
..和使用不存在? – Amit
可以詳細說明嗎? – mp1990