grosse MySQL query
Thomas
- perl
hi,
ich habe ein Performance Problem mit folgender SQL query in perl.
SELECT DISTINCT mitglied.pkmitglied, mitglied.firmenname, mitglied.ZS_Strasse, mitglied.ZS_PLZ, mitglied.ZS_Ort
FROM mitglied
LEFT JOIN berechtigung ON (mitglied.pkmitglied = berechtigung.rkmitglied)
LEFT JOIN fachgruppezug ON (berechtigung.rkmitglied = fachgruppezug.rkmitglied AND berechtigung.rkberechtigung = fachgruppezug.rkberechtigung)
LEFT JOIN prodfach ON (fachgruppezug.rksektion = prodfach.rksektion AND fachgruppezug.rkfachgruppe = prodfach.rkfachgruppe)
LEFT JOIN produkt ON (prodfach.rkprod = produkt.pkprod)
WHERE produkt.name like '%$suchbegriff%'
LIMIT 25;
das ganze soll zu einem bestimmten produkt ueber 6 Tabellen zu einem oder mehreren Firmen Führen.
danke fuer infos
-t
Hi Thomas,
ich habe ein Performance Problem mit folgender SQL query in perl.
Naja, ein JOIN über 6 Tabellen ist auch nicht unbedingt ein Kinkerlitzchen. Nach meinen Erfahrungen sind JOINS über mehrere Tabellen in MySQL generell recht unperformant, irgendwie scheint der Server im Speicher zuerst alle Kombinationen zu bilden, und die dann nach where und on-klauseln zu filtern, so daß die Abfragezeit schnell ins Uferlose wächst, auch wenn man am Ende nur ein Resultset mit 3 Ergebnissen hat. Deshalb wäre es am besten, wenn Du dir ein paar Joins sparen könntest, und stattdessen zwei selects nacheinander machst, 'LEFT JOIN berechtigung' und 'LEFT JOIN fachgruppezug' schaut mir z.B. nach einem Zugriffsschutz aus, den könnte man vielleicht eventuell vorher abfragen?
Ansonsten bleiben Dir nur die üblichen Optimierungen
Viele Grüße
Stephan