Vinzenz Mai: Query-Performance

Beitrag lesen

Hallo Bruno,

folgender SQL-Query hatte vor kurzem den mySQL 5.0-Server lahm gelegt:

dieser ganz bestimmt nicht. Wenn doch, überdenke Deine Bezeichner!
Sprich: Du hast das Problem fast bis zur Unkenntlichkeit verstümmelt. Das ist keine besonders gute Idee.

SELECT SQL_CALC_FOUND_ROWS tab1.col1, col2, col3 FROM tab1

-- aus welchen Tabellen sind col2 und col3?

LEFT JOIN tab2 ON tab1.id=tab2.tab1_id
LEFT JOIN tab3 ON tab2.id=tab3.tab2_id
LEFT JOIN tab4 ON tab3.id=tab4.tab3_id

-- warum dreimal LEFT JOIN? Alle aufeinander aufbauend. Da gibt es keine
-- Chance, die Auswertungsreihenfolge umzustellen. Bist Du Dir ganz sicher, -- dass Du keine INNER JOINs verwenden kannst?

WHERE  tab1.col1 LIKE 'foo'

-- ist der Mustervergleich wirklich nötig. Reichte nicht das Gleichheitszeichen?

ORDER BY col1 ASC, col2 DESC, col3 ASC LIMIT 0,10

  
\-- LIMIT kann gelegentlich tödlich für die Performance sein :-)  
\-- könnte für filesort verantwortlich sein.  
  
  
Freundliche Grüße  
  
Vinzenz