mySQL 快速删除大量行

标签 mysql select sql-delete

我有两个表,我需要第一个表中没有出现在第二个表中的所有行。

这些表可以被销毁,因为它们是其他表的转储。

第一个表有大约 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/

相关文章:

mysql - Java 8 java.time 未正确映射到 mysql

mysql - 使用mysql拆分字符串

MySQL 按两个 varchar 列排序

mysql - 如何在mysql查询中为每个类别选择一条记录?

MySQL SELECT 语句问题

mysql - mysql跨表删除

php - 传递变量作为上传目录

MySQL 显示值为 NULL 或等于 X 的行

sql - 如何使用CTE在SQLite中删除重复的列-错误

mysql - 从 where 子句中使用的表中删除