Um die Zeilen zu löschen, die in Tabelle 1 von table2 gibt es nicht, ich bin mit der folgenden Abfrage (jede Tabelle hält rund 1 Million Zeilen):Wie kann ich diese bestimmte Abfrage optimieren?
DELETE table2
FROM table2 LEFT JOIN table1 ON table2.col2 = table1.col2
WHERE table1.col2 IS NULL
Es ist eine lange Zeit. Dafür habe ich eine Stored Procedure erstellt, die eine temporäre Tabelle verwendet (temp_col2 ist kleiner als table2, weil es eine Spalte anstatt 20 Spalten hat, die table2 hat).
CREATE PROCEDURE delete_old_rows()
BEGIN
CREATE TEMPORARY TABLE temp_col2 select col2 from table2;
delete table2 FROM table2
LEFT JOIN temp_col2 ON table2.col2 = temp_col2.col2
WHERE col2 IS NULL;
DROP TEMPORARY TABLE IF EXISTS temp_sepet_id;
END
Aber es ist immer noch so langsam. Wie kann ich dieses Problem lösen?
Diese helfen könnten: http://stackoverflow.com/questions/3312876/ Elegant-Way-to-delete-rows-welche-sind-nicht-referenziert-von-anderen-Tabelle – jktin12
Haben Sie einen Index auf table1.col2? Sind die Datentypen der beiden zusammenführenden Spalten identisch? – Bohemian
@Bohemian ja Ich habe Index auf col2 in den beiden Tabellen und den gleichen Datentyp – Imanez