在
`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/