什么是最好的查询这个批量删除?

时间:2011-11-17 15:08:11

标签: mysql database

目前,我正在使用以下查询的变体进行批量删除:

DELETE FROM t1 WHERE t1.key NOT IN (SELECT t2.key FROM t2)

我被告知MySQL中的子查询太慢而且应该进行优化。但我找不到更好的例子。是否可以进行加入和删除?

1 个答案:

答案 0 :(得分:4)

DELETE FROM t1 USING t1 JOIN t2 ON t1.key = t2.key LIMIT 1000;

重复直到没有剩下任何东西,这样就不会长时间阻止表格了。

UPD:但是如果你需要加入同一个表,这个解决方案将不起作用。

UPD2:我忽略了NOT,这是更正的查询:

DELETE FROM t1
USING t1 LEFT JOIN t2 ON t1.key = t2.key
WHERE t2.key IS NULL
LIMIT 1000;

我应该注意,这是子查询以与JOIN相同的速度执行的情况,查看关于该问题的good post Quassnoi