phpbar.de logo

Mailinglisten-Archive

=?iso-8859-1?Q?RE=3A_Erkl=E4rung_eines_LEFT_JOINS_mit_Beispiel?=

RE: Erklärung eines LEFT JOINS mit Beispiel

Matthias Lampert mysql_(at)_lists.phpcenter.de
Mon, 21 May 2001 11:29:32 +0100


Hallo, Patrick!

Also las ich bei Patrick Bierans [mailto:pbierans_(at)_lynet.de]
> > Vielleicht könnte man noch in einer Fußnote anfügen, 
> > dass und warum die LEFT JOINS die Datenbankabfragen viel effizienter
> > machen.  (Oder besser: in der Frage ,,Wie schreibe ich effiziente
> > Abfragen?'' auf Deinen Artikel verweisen)
> Gerne, hab' ich persönlich aber keine Ahnung von.

OK, kleiner Hinweis: Der Unterschied zwischen verketteten
WHERE-Klauseln und der LEFT-JOIN-Methode liegt darin, 
_wie_ der MySQL-Server die Suchmenge bestimmt, aus der er
danach die Ergebnismenge aussiebt.

Bei verketteten WHERE-Klauseln kombiniert der Server jede
Zeile aus Tabelle A mit jeder Zeile aus Tabelle B und die 
so entstandene temporäre Suchtabelle mit jeder Zeile aus 
Tabelle C.  Bei 100 Zeilen in Tabelle A, 200 Zeilen
in Tabelle B und 300 Zeilen in Tabelle C ergibt sich 
damit eine Suchmenge von 6.000.000 Zeilen [!!].

Bei der LEFT-JOIN-Methode haben wir dagegen die Möglichkeit,
für die Suchmenge die Einträge aus Tabelle B und die Einträge
aus Tabelle C _vorzuselektieren_ (ON [Kriterium_A] AND 
[Kriterium_B] AND ...).  Es kann also sein, dass Tabelle A (immer 
komplett) nur mit 10 Einträgen aus Tabelle B und beide nur 
mit 7 Einträgen aus Tabelle C kombiniert werden. Macht nach 
wie vor 100 Zeilen in der Suchmenge!

Überrascht?  Nach meiner Theorie müsste es sich bei der 
Suchmenge um die Zeilenmenge derjenigen Tabelle handeln, die 
den größten Beitrag an Zeilen liefert; die Tabellen werden bei 
LEFT JOIN nicht vertikal, sondern horizontal verbunden und die 
fehlenden Felder bekanntlich immer mit NULL aufgefüllt.

Wir können es also so einrichten, dass der Server statt in 
6 Mio. Einträgen nur in 100 Einträgen suchen soll!  Das nenne
ich eine Frage der Effizienz!


> 
> >     ,,Wie kann ich MS ACCESS an den MySQL-Server anbinden?''
> Hab' ich persönlich aber keine Ahnung von.

Richtete sich auch nicht an Dich, sondern an diejenigen, die 
mitlesen und sich ,,hauptamtlich'' für die FAQ engagieren.


Just my 2%

--

Matthias Lampert, Hamburg

---
*** Weitere Infos zur Mailingliste und MySQL unter http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive