目前我在做大規模刪除使用以下查詢的變化:什麼是最好的質量刪除查詢?
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;
可能會在使用限制 –