使用连接快速删除记录的最有效方法?

时间:2013-04-26 13:15:47

标签: sql-server database

当查询必须加入另一个表时,从SQL Server数据库中删除大型年终清除记录的最快方法是什么?我理解游标很慢。我该做什么

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

似乎使用不同的技术(例如

)加入查询中的表可能会更快
 DELETE FROM table1 WHERE table1_id = table2

4 个答案:

答案 0 :(得分:2)

加入将是最好的方式。

我假设你有一个从table2table1的外键关联,所以你想要在主表之前从第二个表中删除。

示例:

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

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

答案 1 :(得分:0)

您可以在外键上添加级联删除关系然后让SQL服务器为您级联删除吗?

答案 2 :(得分:0)

也许这样的事情会更快。

删除(select * FROM table1 WHERE table1_id in(SELECT table1_id FROM table2 WHERE what))

答案 3 :(得分: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
相关问题