SubQuery的SUbstitute从表中删除记录

时间:2013-10-28 09:17:43

标签: mysql sql database oracle

我使用此查询从一个表中删除唯一记录。

DELETE FROM TABLE 1 WHERE ID NOT IN (SELECT ID form TABLE 2) 

但问题是这两个表都有数百万条记录,使用子查询会非常慢。

任何人都可以告诉我任何替代方案。

3 个答案:

答案 0 :(得分:1)

Delete t1 
from table_1 t1
left join table_2 t2 on t1.id = t2.id
where t2.id is null

答案 1 :(得分:0)

SubQuery实际上很慢joins存在!

DELETE table1 
FROM table1 LEFT JOIN table2 ON table1.id = table2.id
WHERE table2.id is null

答案 2 :(得分:0)

从表中删除数百万条记录始终存在性能问题;你需要检查表是否有 - 1.限制 2.触发器,& 3.索引

就可以了。这些东西会让你的删除更慢......

请在此活动前停用它们。您还应该检查“待删除”记录与整个表卷的比率。如果要删除的记录数超过整个表卷的50%,那么您应该考虑以下方法 -

  1. 创建一个临时表,其中包含您要从原始表中保留的记录。
  2. 放下原始表格。
  3. 将临时表重命名为原始表。
  4. 在进行上述方法之前,请确保您拥有依赖于此原始表的每个对象的定义副本,如约束,索引,触发器等。您可能还需要检查表中是否有你要删除任何孩子。

    完成此活动后,您可以再次启用约束,索引和触发器!

    谢谢, Aditya