Mailinglisten-Archive |
Hallo
Ich habe eine Abfrage, die je mehr Ergebnisse sie liefert, weit mehr als 4
Sekunden dauern kann. Das muss doch irgendwie zu optimieren sein.
Mir fällt allerdings nichts mehr dazu ein.
Hier die Abfrage:
SELECT kfz_firmen.f_id, kfz_firmen.firma, kfz_firmen.strasse, kfz_firmen.plz,
kfz_firmen.ort, kfz_firmen.accountart, kfz_firmen.akin
FROM kfz_firmen, kfz_automarke, kfz_region, kfz_service
LEFT JOIN kfz_zu_af ON (
kfz_firmen.f_id = kfz_zu_af.f_id AND kfz_automarke.a_id = kfz_zu_af.a_id)
LEFT JOIN kfz_zu_rf ON (
kfz_firmen.f_id = kfz_zu_rf.f_id AND kfz_region.r_id = kfz_zu_rf.r_id )
LEFT JOIN kfz_zu_sf ON (
kfz_firmen.f_id = kfz_zu_sf.f_id AND kfz_service.s_id = kfz_zu_sf.s_id )
WHERE kfz_firmen.akin = '1' AND kfz_automarke.akin = '1' AND
kfz_region.akin = '1' AND kfz_service.akin = '1' AND
kfz_service.s_id = '25' AND kfz_zu_sf.s_id = '25'
GROUP BY kfz_firmen.firma, kfz_firmen.strasse
ORDER BY kfz_firmen.accountart, kfz_firmen.firma
LIMIT 0 , 10
Anmerkungen dazu:
Es gibt 4 Tabellen mit Hauptinhalten, wobei sich alles auf die Tabelle
"kfz_firmen" bezieht.
3 Tabellen (kfz_zu_af, kfz_zu_rf, kfz_zu_sf) beinhalten die Verknüpfungen der
Tabellen kfz_automarke, kfz_region und kfz_service mit der Tabelle
kfz_firmen.
Die Verknüpfungstabellen sehen so aus (Beispiel kfz_zu_af):
af_id | a_id | f_id
af_id - Primary
a_id - Index
f_id - Index
Die akin-Spalten sind vom Typ "enum" und beinhalten nur 1 oder 0.
So, und dann hab ich zu dieser Abfrage noch eine EXPLAIN-Ausgabe (Erzeugt mit
phpMyAdmin):
+---------------+-------+---------------+---------+---------+
| table | type | possible_keys | key | key_len |
+---------------+-------+---------------+---------+---------+
| kfz_service | const | PRIMARY,akin | PRIMARY | 4 |
| kfz_firmen | range | akin | akin | 1 |
| kfz_automarke | ALL | akin | NULL | NULL |
| kfz_zu_af | ref | a_id,f_id | a_id | 4 |
| kfz_region | ALL | akin | NULL | NULL |
| kfz_zu_rf | ALL | f_id,r_id | NULL | NULL |
| kfz_zu_sf | ref | f_id,s_id | f_id | 4 |
+---------------+-------+---------------+---------+---------+
+---------------+-------------------+------+--------------------------------+
| table | ref | rows | Extra |
+---------------+-------------------+------+--------------------------------+
| kfz_service | const | 1 | Using temporary; Using filesort|
| kfz_firmen | NULL | 132 | Using where |
| kfz_automarke | NULL | 24 | Using where |
| kfz_zu_af | kfz_automarke.a_id| 12 | |
| kfz_region | NULL | 30 | Using where |
| kfz_zu_rf | NULL | 25 | |
| kfz_zu_sf | kfz_firmen.f_id | 12 | Using where |
+---------------+-------------------+------+--------------------------------+
Wo kann man hier mit einer Optimierung ansetzen?
--
Koala
php::bar PHP Wiki - Listenarchive