![]() Mailinglisten-Archive |
Marc Logemann schrieb am Mittwoch, den 29. September 1999, in der deutschen MySQL-Mailingliste: > kann ich mit Mysql (3.22.23) einen LEFT INNER JOIN realisieren, ohne > den nicht soooo performanten syntax: > > select * from table1, table2 where table1.field = table2.field > > zu nehmen?? (da hier erst kartesiches Produkt gebildet wird) N�, das stimmt so nicht. MySQL bildet nicht erst ein riesiges kartesisches Produkt, aus dem dann Zeilen herausgefiltert werden (auch wenn das die Syntax vermuten lassen k�nnte), sondern sucht sich die passenden Partnerzeilen aus beiden Tabellen und erzeugt daraus dann passend die Ergebniszeilen. F�r die Geschwindigkeit dieser Suche in den Tabellen ist aber entscheidend, da� Du Indexe auf beiden Feldern hast und beide Felder den gleichen Typ haben! Kennst Du den Befehl EXPLAIN in MySQL? Damit kannst Du sehr sch�n sehen, welche Indexe MySQL f�r eine Query nutzt ... Siehe auch im MySQL-Handbuch die Kapitel "7.21 EXPLAIN syntax (Get information about a SELECT)" und "10.4 How MySQL uses indexes" und folgende. > Ich habe irgendwo was gelesen das 3.23 die Klausel INNER JOIN > versteht, stimmt das?? Ja, das ist synonym zum Komma. Die Join-Bedingung kommt weiterhin in den WHERE-Teil (was keinen Nachteil darstellt, wie ich zu erkl�ren versuche). Jedes halbwegs vern�nftige Datenbanksystem sollte eh unabh�ngig davon, ob Du eine ON-Klausel schreibst oder eine Bedingung im WHERE-Teil, den optimalen Weg zur Auswertung suchen, was sicher fast immer bedeutet, _kein_ volles Kreuzprodukt zu materialisieren. Ciao, Martin -- Martin Ramsch <m.ramsch_(at)_computer.org> <URL: http://ramsch.home.pages.de/ > PGP: 0xE8EF4F75, 52 44 5E F3 B0 B1 38 26 E4 EC 80 58 7B 31 3A D7 --- *** Abmelden von dieser Mailingliste funktioniert per E-Mail *** an mysql-de-request_(at)_lists.4t2.com mit Betreff/Subject: unsubscribe
php::bar PHP Wiki - Listenarchive