当查询必须加入另一个表时,从SQL Server数据库中删除大型年终清除记录的最快方法是什么?我理解游标很慢。我该做什么
DELETE FROM table1 WHERE table1_id in (SELECT table1_id FROM table2 WHERE whatever)
似乎使用不同的技术(例如
)加入查询中的表可能会更快 DELETE FROM table1 WHERE table1_id = table2
答案 0 :(得分:2)
加入将是最好的方式。
我假设你有一个从table2
到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
如果您首先尝试从主表中删除,则可能会遇到外键约束违规。
答案 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