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