phpbar.de logo

Mailinglisten-Archive

Performance unterschiedlich?

Performance unterschiedlich?

Michael Donning mysql-de_(at)_lists.bttr.org
Mon, 7 Oct 2002 08:41:12 +0200


Hallo Andreas,


> -----Original Message-----
> From: Andreas Kunert [mailto:akunert_(at)_main-rheiner.de]
> habe eine Frage zur Performance dieser Abfrage? Ist der LEFT JOIN in der
> Regel schneller oder spielt das keine Rolle?
>
> SELECT stichwort.artikel_id, artikel.inhalt
> FROM stichwort,artikel
> WHERE stichwort.stichwort = 'topmeldung' AND artikel.id =
> stichwort.artikel_id ORDER BY art_id DESC
>
> SELECT stichwort.artikel_id, artikel.inhalt
> FROM stichwort
> LEFT JOIN artikel ON artikel.id = stichwort.artikel_id
> WHERE stichwort.stichwort = 'topmeldung' ORDER BY art_id DESC

Meines Erachtens machst du da einen sogenannten "INNER JOIN" oder einfach
JOIN :).
Ein Left Join schließt auch alle Sätze aus stichwort ein, für die es keine
Treffer in Artikel gibt.

Wenn Du nur einen normalen join brauchst ist die Arbeit der ersten variante
schon ok. Der Optimizer von Mysql macht aus dem inner join und deinem
Statement am Ende (hoffentlich) den selben Ablauf. Um das zu verifizieren,
kannst Du vor beide Statements mal ein DESCRIBE setzen (siehe dazu auch
Handbuch).

>
> Wie siehts aus, wenn ich noch eine dritte Tabelle "joinen" will?
>
> SELECT stichwort.artikel_id, artikel.inhalt,ort.name
> FROM stichwort,artikel,ort
> WHERE stichwort.stichwort = 'topmeldung' AND artikel.id =
> stichwort.artikel_id AND artikel.ort_id = ort.id
> ORDER BY art_id DESC

Grundsätzlich auch in Ordnung.

Ansonsten für 2 joins auf die 1. Tabelle:
Select ...
from tab1 inner join tab2 on bedingung1 inner join tab3 on bedingung
where ...

Gruss, Michael Donning

---
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive