我有两个表,我需要第一个表中没有出现在第二个表中的所有行。
这些表可以被销毁,因为它们是其他表的转储。
第一个表有大约 5700 万行。第二个表有大约 1000 万行。
由于显而易见的原因,这两个查询都需要很长时间,请帮助我更快地完成此操作。
SELECT * FROM db.first WHERE id NOT IN (SELECT id FROM db.second)
DELETE FROM db.first WHERE id IN (SELECT id FROM db.second)
编辑:我不需要第二个表中的任何记录,我只需要出现在第一个表中但未出现在第二个表中的行。
最佳答案
使用连接可能会快得多:
select one.*
from db.first one
left join db.second two on one.id = two.id
where two.id is null
和删除:
delete first
from first
join second on first.id = second.id
关于mySQL 快速删除大量行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6586235/