Stephan Huber: grosse MySQL query

Beitrag lesen

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

  • statt 'like '%$suchbegriff%'' 'like '$suchbegriff%'' verwenden, dann kann MySQL den Index auf produkt.name nutzen
  • auf alle Felder, die in den Joins verwendet werden, einen Index setzen

Viele Grüße
Stephan