如何删除两个大表的析取行?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何删除两个大表的析取行?相关的知识,希望对你有一定的参考价值。

餐桌产品1:30 mio行表产品2:100个mio行

两个表都不同,但是共享一个共同的唯一索引:

create table products1(
    ...
    UNIQUE KEY uniq_products (name, manufacture, releasedate,... <a total of 10 fields> )
)

我想从表1中删除所有行,其唯一索引不在表2中出现。

我开始如下:

DELETE FROM products1 p1 WHERE NOT EXISTS (
    SELECT 1 FROM products2 p2 WHERE p1.name = p2.name, p1.manufacture = p2.manufacture, ...
)

问题:这通常是正确的方法吗?由于数据集很大,如何加快此类查询的速度?

答案
您的delete似乎在做您想做的,假设,的确是AND。这是一个合理的查询。
另一答案
我建议两种方法

以上是关于如何删除两个大表的析取行?的主要内容,如果未能解决你的问题,请参考以下文章

删除两个 MySQL 大表中的匹配记录

从大表的子集中对随机行进行最快查询 - postgresql

删除查询中包含大表的 IN 子句中的子查询性能

特定场景下SQL的优化

从两个大表的连接中选择不同的值

使用 JDBC 迭代大表的最快方法