Unterschiedl. Abfragedauer [MySQL]

Moin,
kann mir einer erklären, wiese folgende Abfragen unterschiedliche Zeit benötigen?

a)
select * from tabelle_a
left join tabelle_b on tabelle_a.id=tabelle_b.id;

b)
select * from tabelle_b
left join tabelle_a on tabelle_a.id=tabelle_b.id;

Tabelle a enthält ca. 5.000 Datensätze,
Tabelle b enthält ca. 10.000 Datensätze

Bei Abfragevariante a) benötige ich ca. 30 Sekunden, Abfragevariante b) dauert keine 5 Sekunden.

Gibt es hierfür eine Erklärung? Sind doch die gleiche Anzahl Datensätze, welche durchlaufen werden.

Danke und Gruß

Marcel

hi Marcel

kommt immer darauf an, wie die indizes ausschauen. ausserdem macht es sehr wohl einen riesigen unterschied, ob du einen full-table-scann auf eine kleine tabelle machst und lookups auf die grosse oder umgekehrt.

im ersten fall muss die db nur 5000 sätze durchlaufen und pro satz das gegenstück in der anderen suchen. im zweiten fall werden 10000 sätze gelesen. kann durchaus sein, dass die zeitdauer bei ansteigender datenmenge progressiv steigt.

im oracle ist es z.b. so, dass es einen optimizer gibt, der aufgrund von statistiken entscheiden, welcher zugriffspfad auf die daten der optimale ist. bei gut getuneden system sollten also beide abfragen gleich schnell laufen.

ich habe nun nicht so den technischen background über mysql und ob es dort auch einen optimizer gibt. generell ist es aber schon so, dass man beim formulieren des statements sich schon gedanken über die datenmengen machen sollte.

lg
erwin

Hallo Erwin,
vielen Dank, diese Info reicht mir vollkommen aus.
Werde dann mal die weiteren Abfragen überprüfen und noch ein wenig versuchen rauszuholen.

Danke und Gruß

Marcel

Ich weiß ja nicht was du für Daten im Table hast, oder wie dein Server ausgestattet ist. Aber 30 Sekunden für 10.000 Zeilen ist extrem lahm.
Hast du vielleicht keine Indexe gesetzt auf tabelle_b.id und tabelle_a.id ?

Ansonsten wie die anderen schon gesagt haben: MySQL ist nicht mit so fetten Optimierern ausgerüstet wie Oracle & Co., da kann es schon passieren das er den „falschen“ Weg für die Aufgabe nimmt und du beim Query schauen mußt wie rum du es schreibst.