考虑此查询
Delete from T1 where T1.ID in (select ID from T2)
T1和T2都是数百万条记录的大规模表。
T1是“实时”表,T2是“存档”表。在我们将记录从T1复制到T2之后,我们想要从T1清除它。使用许多索引读取T1优化。
执行此操作的有效方法是什么?
我在.net环境中,所以基于代码的解决方案也可以工作。
答案 0 :(得分:3)
在大多数情况下,对于大量行,EXISTS和INNER JOIN优于IN(SELECT ..),并且EXISTS常常优于INNER JOIN
答案 1 :(得分:1)
为了执行数据库,最好删除批记录,以便最小化锁定。
DELETE TOP (1000)
FROM T1
WHERE T1.ID IN (SELECT ID
FROM T2)
您可以优化已删除的记录数。
重新运行脚本,直到没有记录被删除