Zwei Tabellen vergleichen -> Timeout :(
Verfasst: 14.11.2005 00:11
Folgendes Problem:
Ich möchte zwei Tabellen vergleichen und zwar wie folgt: In Tabelle 1 gibt es Datensätze, die überflüssig sind und zwar die, die in Tabelle 2 keine Entsprechung haben. Also schaue ich, ob es in Tabelle 2 den Namen auch gibt, wenn nicht, soll der überflüssige Datensatz aus der Tabelle 1 angezeigt (und in einem späteren Schritt gelöscht) werden.
Dazu hab ich mir folgende Abfrage zusammengestellt:
Das LIMIT 25 kann man sich erstmal wegdenken, das diente nur, um zu schauen, woran es liegt, daß es nicht funktioniert. Und auch mit dem Limit klappts nicht.
"tabelle1.name = tabelle2.nachname" durch "tabelle1.name LIKE tabelle2.nachname" ersetzen bringts auch nicht.
Daß es nicht klappt, liegt nicht etwa am Statement selbst, denn das ist offenbar valide und läuft auch (manchmal) durch, mit Limit 5 meinetwegen, aber auch dann nicht immer.
Die Abfrage dauert, auch mit geringem Limit, ewig. Meist kommt es zu einem Timeout, was ich daran sehe, daß im IE "Server nicht gefunden" angezeigt wird.
In beiden Tabellen sind je rund 25.000 Datensätze. Ich kann mir schon denken, daß es dadurch recht lange geht, denn schließlich müssen für jeden Datensatz in Tabelle 1 alle Datensätze in Tabelle 2 abgecheckt werden. Das macht im Extremfall dann 25000*25000 Aktionen. Oder so ähnlich.
Wie auch immer: Wie kriege ich das ganze performant zum laufen?
Ich möchte zwei Tabellen vergleichen und zwar wie folgt: In Tabelle 1 gibt es Datensätze, die überflüssig sind und zwar die, die in Tabelle 2 keine Entsprechung haben. Also schaue ich, ob es in Tabelle 2 den Namen auch gibt, wenn nicht, soll der überflüssige Datensatz aus der Tabelle 1 angezeigt (und in einem späteren Schritt gelöscht) werden.
Dazu hab ich mir folgende Abfrage zusammengestellt:
Code: Alles auswählen
$query = "select tabelle1.id, tabelle1.name from tabelle1 LEFT JOIN tabelle2 ON tabelle1.name = tabelle2.nachname where ISNULL(tabelle2.nachname) LIMIT 25";
"tabelle1.name = tabelle2.nachname" durch "tabelle1.name LIKE tabelle2.nachname" ersetzen bringts auch nicht.
Daß es nicht klappt, liegt nicht etwa am Statement selbst, denn das ist offenbar valide und läuft auch (manchmal) durch, mit Limit 5 meinetwegen, aber auch dann nicht immer.
Die Abfrage dauert, auch mit geringem Limit, ewig. Meist kommt es zu einem Timeout, was ich daran sehe, daß im IE "Server nicht gefunden" angezeigt wird.
In beiden Tabellen sind je rund 25.000 Datensätze. Ich kann mir schon denken, daß es dadurch recht lange geht, denn schließlich müssen für jeden Datensatz in Tabelle 1 alle Datensätze in Tabelle 2 abgecheckt werden. Das macht im Extremfall dann 25000*25000 Aktionen. Oder so ähnlich.
Wie auch immer: Wie kriege ich das ganze performant zum laufen?