0

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

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

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

谁能告诉我任何替代方案。

4

3 回答 3

1
Delete t1 
from table_1 t1
left join table_2 t2 on t1.id = t2.id
where t2.id is null
于 2013-10-28T09:20:39.410 回答
0

子查询真的很慢,事实上连接存在!

DELETE table1 
FROM table1 LEFT JOIN table2 ON table1.id = table2.id
WHERE table2.id is null
于 2013-10-28T09:23:25.903 回答
0

从表中删除数百万条记录总是存在性能问题;您需要检查表是否具有 - 1. 约束 2. 触发器和 3. 索引

在上面。这些东西会让你的删除速度更慢......

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

  1. 创建一个临时表,其中包含要从原始表中保留的记录。
  2. 删除原始表。
  3. 将临时表重命名为原始表。

在采用上述方法之前,请确保您拥有依赖于该原始表的每个对象的定义副本,例如约束、索引、触发器等。您可能还需要检查您要使用的表是否删除有任何孩子。

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

谢谢,阿迪亚

于 2013-10-28T09:26:11.433 回答