2

当查询必须连接到另一个表时,从 SQL Server 数据库中删除记录以进行大型年终清除的最快方法是什么?我知道游标很慢。我做吗

DELETE FROM table1 WHERE table1_id in (SELECT table1_id FROM table2 WHERE whatever)

似乎使用不同的技术加入查询中的表可能会更快,比如

 DELETE FROM table1 WHERE table1_id = table2
4

4 回答 4

2

加入将是最好的方法。

我假设你有一个外键关联 from table2to 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

如果您首先尝试从主表中删除,您可能会遇到外键约束违规。

于 2013-04-26T13:21:45.810 回答
0

您能否在外键上添加级联删除关系,然后让 SQL 服务器为您级联删除?

于 2013-04-26T13:26:22.863 回答
0

也许这样的事情会更快。

从(选择 * FROM table1 WHERE table1_id in(SELECT table1_id FROM table2 WHERE 不管))中删除

于 2013-04-26T13:30:07.727 回答
0

您可以试试这个(应该比 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
于 2013-04-26T19:00:51.093 回答