Sql-Server

刪除 SQL 表中超過 50K 條記錄

  • January 26, 2021

我們在一個 SQL 表中有 500k 條記錄。下面是表結構

UserID varchar
FirstName varchar
LastName varchar
Address varchar

我們需要刪除該表中的 50K 記錄。我們嘗試了以下方法

**方法 1:**這有 50K DELETE 語句,大約需要 40 分鐘

DELETE FROM [dbo].[Table] WHERE UserID = 'tom345'
DELETE FROM [dbo].[Table] WHERE UserID = 'john45'

依此類推,直到 50K DELETE 語句

**方法 2:**這包含 IN 語句中的所有 50K 使用者 ID,但需要超過 40 分鐘

DELETE FROM [dbo].[Table] WHERE UserID IN ( 'tom345', 'john45',  .... ) 

有沒有其他方法相對需要更少的時間?

創建一個臨時表,放入您的使用者並在您的刪除語句中使用它:

CREATE TABLE delete_users (user_id ... primary key);
INSERT INTO delete_users (user_id) values (...),(...)...;
DELETE FROM  [dbo].[Table] x 
WHERE EXISTS (
   SELECT 1 FROM delete_users y WHERE x.user_id = y.user_id
);
DROP TABLE delete_users;

引用自:https://dba.stackexchange.com/questions/267575