0

在里面

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

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

4

1 回答 1

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 上放置一个索引以使其快速运行。

于 2012-08-17T15:54:42.837 回答