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

时间:2012-08-17 15:45:44

标签: mysql select

`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)

但它有效。你知道一些聪明的方法吗?

1 个答案:

答案 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上加上一个索引,使其快速发展。