目前我在做大规模删除使用以下查询的变化:什么是最好的质量删除查询?
DELETE FROM t1 WHERE t1.key NOT IN (SELECT t2.key FROM t2)
有人告诉我,子查询在MySQL太慢,应该进行优化。但我找不到一个更好的例子。是否有可能做一个加入和删除?
目前我在做大规模删除使用以下查询的变化:什么是最好的质量删除查询?
DELETE FROM t1 WHERE t1.key NOT IN (SELECT t2.key FROM t2)
有人告诉我,子查询在MySQL太慢,应该进行优化。但我找不到一个更好的例子。是否有可能做一个加入和删除?
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;
可能会在使用限制 –