优化表中5000万条记录的删除操作

Ümi*_*AYA 1 sql sql-server sql-server-2008 sql-server-2008-r2

我需要删除大约5000万条记录(而不是整个表格),我搜索并找到了一些方法

这个查询做我想要的,我可以通过在a中存储子查询的结果来稍微优化它 #TempTable

我还可以做些什么?

到目前为止最快的查询:

CREATE TABLE #UserIDs ( UserId UNIQUEIDENTIFIER  NOT NULL  );
CREATE CLUSTERED INDEX myIndex ON #UserIDs (UserId)

INSERT INTO #UserIDs 
SELECT UserId FROM TableX WHERE UserID IS NOT NULL;

INSERT INTO #UserIDs 
SELECT UserID FROM TableY WHERE CreatorID IS NOT NULL;

    DELETE TOP (10000)
    FROM Users
    WHERE 
        Email IS NULL
        AND
        (
            (NOT EXISTS ( SELECT 1 FROM #UserIDs WHERE #UserIDs.UserId = Users.UserId ) )
        )

DROP TABLE #UserIDs
Run Code Online (Sandbox Code Playgroud)

执行计划

End*_*rju 6

如果要保留的记录数量与您需要删除的记录数量相比较小,我会将它们复制到临时表中,然后TRUNCATE原始表格并从临时表中插入保留的记录.表截断的速度非常快,因此可以节省大量时间.但TRUNCATE TABLE并不总是有效,但它可以为您提供解决方案.