当查询必须连接到另一个表时,从 SQL Server 数据库中删除记录以进行大型年终清除的最快方法是什么?我知道游标很慢。我做吗
DELETE FROM table1 WHERE table1_id in (SELECT table1_id FROM table2 WHERE whatever)
似乎使用不同的技术加入查询中的表可能会更快,比如
DELETE FROM table1 WHERE table1_id = table2
当查询必须连接到另一个表时,从 SQL Server 数据库中删除记录以进行大型年终清除的最快方法是什么?我知道游标很慢。我做吗
DELETE FROM table1 WHERE table1_id in (SELECT table1_id FROM table2 WHERE whatever)
似乎使用不同的技术加入查询中的表可能会更快,比如
DELETE FROM table1 WHERE table1_id = table2
加入将是最好的方法。
我假设你有一个外键关联 from table2
to table1
,所以你要从主表之前的第二个表中删除。
例子:
DELETE T2
FROM table1 T1
JOIN table2 T2 ON -- JOIN CRITERIA HERE
WHERE -- FILTER CRITERIA HERE
DELETE T1
FROM table1 T1
JOIN table2 T2 ON -- JOIN CRITERIA HERE
WHERE -- FILTER CRITERIA HERE
如果您首先尝试从主表中删除,您可能会遇到外键约束违规。
您能否在外键上添加级联删除关系,然后让 SQL 服务器为您级联删除?
也许这样的事情会更快。
从(选择 * FROM table1 WHERE table1_id in(SELECT table1_id FROM table2 WHERE 不管))中删除
您可以试试这个(应该比 IN 语句更快,因为查询停止比在子查询中找到第一个值并搜索下一个值):
DELETE t1
FROM table1 t1
WHERE EXISTS (SELECT 0
FROM table2 t2
WHERE t1.table1_id = t2.table1_id
AND whatever)
或者你可以加入:
DELETE t1
FROM table1 t1
JOIN table2 t2 ON t1.table1_id = t2.table1_id
WHERE whatever