mysql - 如何获取从一个表到另一个表的所有差异(大量行〜500k)

标签 mysql select

`synchro_newitems`

表我有所有新项目(来自外部源)〜大约 500k 行。它只有一列:

`new_ids`

`synchro_olditems`

表我拥有所有当前项目(也来自外部源)〜大约 500k 行。它只有一列:

`old_ids`

我必须仅从 synchro_newitems 获取新项目:

(新项目)= synchro_newitems (-) synchro_olditems

我尝试通过将差异插入到第三个表中来做到这一点:

INSERT INTO `synchro_diff` (`id`) 
SELECT DISTINCT new_ids FROM synchro_newitems 
LEFT JOIN 
synchro_olditems ON synchro_newitems.new_ids = synchro_olditems.old_ids 
WHERE synchro_olditems.old_ids IS NULL

(与“NOT IN”类似)

它适用于少量行。但当有 500 000 行需要比较时会失败。

我尝试过简单的:

DELETE FROM synchro_newitems WHERE exists(SELECT * FROM synchro_olditems)

但这不起作用..你知道一些聪明的方法吗?

最佳答案

这是 mysql 查询的一个奇怪之处。试试这个:

select distinct new_ids
from synchro_newitems n
where not exists (select 1 from synchro_olditems o where n.new_ids = old.old_ids)

这优化得更好。而且,更好的是,在 o.old_ids 上放置一个索引,使其速度极快。

关于mysql - 如何获取从一个表到另一个表的所有差异(大量行〜500k),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12008953/

相关文章:

mysql - mySQL View 出现 Zend_Db PDO 异常?

php - 根据另一个表mysql的顺序动态更改表数据

MySQL 选择和限制

c# - 动态 Linq select 语句

mysql - 如何始终返回子查询结果?

mysql - 如何在hive中的select语句中编写带有附加列的子查询,该附加列的单个值是通过某些行的总和获得的

mysql - 如何将 sql 查询的结果转换为具有特定格式的 html 表

python - MySQL-python 安装失败,退出状态为 1120

MYSQL查询获取评论网站的平均评分值?

php - 如何将 `select a category` 文本添加到选项下拉列表中?