Moin,
für ein Update der Tabelle t1 müssen aus dieser alle Tupel mit der MSN, die auch in der Tabelle t2 vorkommen, gelöscht werden. Danach wird der Inhalt von t2 nach t1 übertragen. Das Problem ist die Geschwindigkeit der Löschanfrage. Da ich diesen Vorgang hintereinander auf mehrere Tabellen anwenden muss, wird die Angelegenheit schnell zum Geduldsspiel.
Unter der jeweiligen Anfrage steht die Dauer der Verarbeitung. Wie man sieht, geschieht die Abarbeitung des ersten Statements augenblicklich. Da ich die Tabellenupdates in Zukunft per Skript erledigen will, muss ich die MSN´s per Subquery ermitteln.
1.) DELETE FROM t1 WHERE MSN IN ('2','3','4');
-- Statistics (TIME: 00:00:00, Records: 0, Fields: 0)
2.) DELETE FROM t1 WHERE MSN IN (SELECT DISTINCT field2 FROM t2);
-- Statistics (TIME: 00:03:36, Records: 0, Fields: 0)
3.) DELETE FROM t1 USING t1, t2 WHERE t1.MSN=t2.field2;
-- Statistics (TIME: 00:01:36, Records: 0, Fields: 0)
Die Frage ist, wie bekommt man dies mit einer Subquery Anweisung schneller hin.
Andererseits interessiert mich auch, woher der Zeitunterschied zwischen 1. und 2. kommt. Falls mir jemand die interne Verarbeitung dieser beiden Querys seitens MySQL erklären konnte, wäre auch das sehr hilfreich.
Vielen Dank schon mal im voraus
für ein Update der Tabelle t1 müssen aus dieser alle Tupel mit der MSN, die auch in der Tabelle t2 vorkommen, gelöscht werden. Danach wird der Inhalt von t2 nach t1 übertragen. Das Problem ist die Geschwindigkeit der Löschanfrage. Da ich diesen Vorgang hintereinander auf mehrere Tabellen anwenden muss, wird die Angelegenheit schnell zum Geduldsspiel.
Unter der jeweiligen Anfrage steht die Dauer der Verarbeitung. Wie man sieht, geschieht die Abarbeitung des ersten Statements augenblicklich. Da ich die Tabellenupdates in Zukunft per Skript erledigen will, muss ich die MSN´s per Subquery ermitteln.
1.) DELETE FROM t1 WHERE MSN IN ('2','3','4');
-- Statistics (TIME: 00:00:00, Records: 0, Fields: 0)
2.) DELETE FROM t1 WHERE MSN IN (SELECT DISTINCT field2 FROM t2);
-- Statistics (TIME: 00:03:36, Records: 0, Fields: 0)
3.) DELETE FROM t1 USING t1, t2 WHERE t1.MSN=t2.field2;
-- Statistics (TIME: 00:01:36, Records: 0, Fields: 0)
Die Frage ist, wie bekommt man dies mit einer Subquery Anweisung schneller hin.
Andererseits interessiert mich auch, woher der Zeitunterschied zwischen 1. und 2. kommt. Falls mir jemand die interne Verarbeitung dieser beiden Querys seitens MySQL erklären konnte, wäre auch das sehr hilfreich.
Vielen Dank schon mal im voraus