Mailinglisten-Archive |
Hallo Carsten > -----Original Message----- > From: Carsten Wawer [mailto:mailingliste at wawer.de] > hallo stefan, > > > So: > > > > KEY ( spalte_a, spalte_b ) > > > > Die Spalten sollten aber IMHO gleiches Format haben. > > Schau am besten noch mal in die Doku. @Stefan: Das ist kein Index über mehrere Tabellen und den gibts "so" auch nicht. > > ich wollte über mehrere tables suchen. beispiel: > > table1: personen > ================ > * id > * name > * vorname > * beruf > > table2: staedte > =============== > * id > * name > > table3: wohnorte > ================ > * id > * fk_stadt > * fk_person > > jetzt habe ich einen index auf personen.beruf und möchte alle > arbeitslosen personen aus köln dargestellt bekommen. koeln hat id 12. > > SELECT personen.vorname, personen.nachname > FROM personen > INNER JOIN wohnorte ON wohnorte.fk_person = personen.id > WHERE personen.beruf = 'arbeitslos' AND wohnorte.fk_stadt = 12 > > der index auf personen.beruf wird aber laut EXPLAIN nicht genutzt. woran > liegts? Tja der Optimizer hat da immer seine eigenen Vorstellungen :), u.a. auch über die join Reihenfolge. Zunächst sollte bei einem Join auch ein Index über (am besten) die komplette Join-Bedingung stattfinden: -> Index auf wohnorte.fk_person bzw in diesem Fall auf die komplette Bedingung: -> Index auf wohnorte (fk_stadt,fk_person) (Reihenfolge der Spalten hier nicht so wichtig, hat aber später Einfluß auf die Wiederverwendbarkeit des Indizes, so wie hier kann er auch als Index auf fk_stadt alleine verwendet werden). Den Index auf personen.beruf solltest Du natürlich beibehalten. Ansonsten richtet sich mysql noch nach der Werteverteilung in den Tabellen, enthalten die Tabellen zur Zeit noch Testdaten bzw. unrepräsentative Werte, so geht mysql teilw. einen anderen als den gedachten Weg. (z.b. wenn die Tabelle den Zustand vom Rosenmontag enthält, wo keiner in Köln arbeitet, wenn alle arbeitslos sind, dann braucht man dafür auch keinen Index) Notfalls läßt mysql sich noch im Join zur Verwendung eines bestimmten Index "zwingen" (quasi die "Wink mit dem Zaunpfahl Methode") schau dazu im Handbuch mal bei den Joins nach. Grüße Michael Donning -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive