标签: mysql database
目前,我正在使用以下查询的变体进行批量删除:
DELETE FROM t1 WHERE t1.key NOT IN (SELECT t2.key FROM t2)
我被告知MySQL中的子查询太慢而且应该进行优化。但我找不到更好的例子。是否可以进行加入和删除?
答案 0 :(得分:4)
DELETE FROM t1 USING t1 JOIN t2 ON t1.key = t2.key LIMIT 1000;
重复直到没有剩下任何东西,这样就不会长时间阻止表格了。
UPD:但是如果你需要加入同一个表,这个解决方案将不起作用。
UPD2:我忽略了NOT,这是更正的查询:
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。