MySQL -> DB stürzt bei LEFT JOIN-Query ab

xrax

Erfahrenes Mitglied
Hallo zusammen,

ich möchte die Datensätze finden welche in Tabelle container aber nicht in content vertreten sind. Der Vergleich läuft über die Spalte vendor_artno. In container sind 15250 , in content 15200 Datensätze. Davon sind alle content - datensätze in container enthalten. Aber ebend noch 50 weitere, die ich nun finden möchte.

Wenn ich diese Query absetzte zuckt die Festplatte zwar ab und zu noch, aber ein Ergebniss erhalte ich nie.

select content.* FROM content LEFT JOIN container ON content.vendor_artno=container.vendor_artno WHERE container.vendor_artno IS NULL

Was ist da los ? Sind das wieder millionen Abfragen die durch die DB gemacht werden müssen oder ist die Query Mist oder was..?

Gruß und Dank
xrax
 
xrax hat gesagt.:
Was ist da los ? Sind das wieder millionen Abfragen die durch die DB gemacht werden müssen oder ist die Query Mist[...]
Ich denke ein bisschen von beidem.
Wenn ich mich nicht total irre und verrechnet habe, dann sind es exakt 231.800.000 Abfragen.
Denn (wenn ich mich wie gesagt nicht irre) sucht er für jeden Datensatz content einen entsprechenden Datensatz in container (also durchsucht er für Datensatz 1 aus content alle 15250 Datensätz in container).

Sind die Daten in content und container denn vollkommen identisch (bis auf die 50)?

redlama
 
Hallo redlama,

habs mir gedacht das ich mal wieder den EarthSimulator für die Query brauche. :)

->Sind die Daten in content und container denn vollkommen identisch (bis auf die 50)?

Ja das sind sie. Allerdings wird das Volumen auf ca. 50.000 Datensätze mit bis zu 5.000 unterschiedlichen steigen.

Gruß
xrax
 
Kannst Du denn nicht jedem Datensatz eine eindeutig ID (und der ID den Primary Key) zuweisen, die in beiden Tabellen den gleichen Wert für den gleichen Datensatz hat?
Dann könntest Du doch nach den Datensätzen in container suchen, deren ID nicht einer ID aus content entspricht (sollte durch den Key um einiges! schneller gehen).

redlama
 
Hallo beisammen,
ich möchte mich ja nur ungern einmischen, aber ich denke keinesfalls, dass es an der Anzahl Sätze in beiden Tabellen liegt. 15.000 Sätze plusminus ein paar sollten für MySQL ein Klacks sein.

Für das was Du willst, musst Du die Abfrage umdrehen: Suche alle Sätze in der "größeren" Tabelle, die kein Pendant in der "kleineren" haben:

Code:
select container.* FROM container LEFT JOIN content ON content.vendor_artno=container.vendor_artno WHERE content.vendor_artno IS NULL

So müsst's eigentlich gehen.

Martin
 

Neue Beiträge

Zurück