我正在使用此查詢從一個表中刪除唯一記錄。SUbstiute SubQuery從表中刪除記錄
DELETE FROM TABLE 1 WHERE ID NOT IN (SELECT ID form TABLE 2)
但問題是,兩個表都有數以百萬計的記錄,並且使用子查詢會很慢。
任何人都可以告訴我任何選擇。
我正在使用此查詢從一個表中刪除唯一記錄。SUbstiute SubQuery從表中刪除記錄
DELETE FROM TABLE 1 WHERE ID NOT IN (SELECT ID form TABLE 2)
但問題是,兩個表都有數以百萬計的記錄,並且使用子查詢會很慢。
任何人都可以告訴我任何選擇。
Delete t1
from table_1 t1
left join table_2 t2 on t1.id = t2.id
where t2.id is null
MySQL不會優化'NOT IN'反連接的效率與'OUTER JOIN/IS NULL'效率一樣嗎?參見[@Quassnoi的分析](http://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join-is-null-mysql/):「*算法是實際上是一樣的......並且查詢在同一時間完成。「。 – eggyal
子查詢是真的很慢infact joins存在!
DELETE table1
FROM table1 LEFT JOIN table2 ON table1.id = table2.id
WHERE table2.id is null
從表格中刪除數百萬條記錄總是會有性能問題;你需要檢查,如果表中有 - 1.限制 2.觸發器,& 3.指數
就可以了。這些東西會讓你的刪除更慢...
請在此活動前禁用它們。您還應該檢查「待刪除」記錄與整個表格卷的比率。如果要刪除的記錄數量超過整個表格數量的50%,那麼您應該考慮以下方法 -
在開始上述方法之前,請確保您擁有依賴於此原始表的每個對象的定義副本,例如約束,索引,觸發器等。您可能還需要檢查您要刪除的表格有任何孩子。
完成此活動後,您可以再次啓用約束,索引,觸發器!
謝謝, Aditya
取決於您的索引策略。 – eggyal