Ü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)

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