在
中`synchro_newitems`
表我有所有新项目(来自外部来源)〜约500k行。它有一栏:
`new_ids`
在
中`synchro_olditems`
表我有所有当前项目(也来自外部源)〜约500k行。它有一栏:
`old_ids`
我必须只从synchro_newitems
获取新项目:
(新项目)= synchro_newitems
( - )synchro_olditems
我尝试通过将差异插入第3个表来实现:
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)
但它有效。你知道一些聪明的方法吗?
答案 0 :(得分:1)
这是一个奇怪的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上加上一个索引,使其快速发展。