Slow queries

Anonymous

Slow queries

Post by Anonymous »

Hallo,

ich habe die Betreuung eines Webserver übernommen, auf dem ein Webprojekt gehostet wird, bei dem ziemlich rechenintensive MySQL-Queries generiert werden.

Es handelt sich dabei um eine Seite, auf der Nutzer nach Unterkünften mit gleichzeitiger Anzeige von Bewertungsprofilen suchen können. Jede Suche nach bestimmten Merkmalen generiert dann eine individuelle SQL-Anfrage.

Das Slow-Query-Log sagt dazu:

...
# Query_time: 12 Lock_time: 0 Rows_sent: 2198 Rows_examined: 1441899
SELECT objects.*, evaluations.object, evaluations.visible, ((AVG(evaluations.location) + AVG(evaluations.equipment) + AVG(evaluations.service) + AVG(evaluations.ambiance))/4) AS eval, SUM(evaluations.recommendation) AS recommendations, COUNT(evaluations.object) as evaluations
FROM objects
LEFT JOIN evaluations ON (objects.uid=evaluations.object AND evaluations.visible="1")
WHERE (objects.name>"")
GROUP BY objects.uid;

# Query_time: 15 Lock_time: 0 Rows_sent: 10 Rows_examined: 1439720
SELECT objects.*, evaluations.object, evaluations.visible, ((AVG(evaluations.location) + AVG(evaluations.equipment) + AVG(evaluations.service) + AVG(evaluations.ambiance))/4) AS eval, SUM(evaluations.recommendation) AS recommendations, COUNT(evaluations.object) as evaluations
FROM objects
LEFT JOIN evaluations ON (objects.uid=evaluations.object AND evaluations.visible="1")
WHERE (objects.name>"")
GROUP BY objects.uid
ORDER BY cat DESC LIMIT 10,10;

# Query_time: 4 Lock_time: 0 Rows_sent: 1128 Rows_examined: 741049
SELECT objects.*, evaluations.object, evaluations.visible, ((AVG(evaluations.location) + AVG(evaluations.equipment) + AVG(evaluations.service) + AVG(evaluations.ambiance))/4) AS eval, SUM(evaluations.recommendation) AS recommendations, COUNT(evaluations.object) as evaluations
FROM objects
LEFT JOIN evaluations ON (objects.uid=evaluations.object AND evaluations.visible="1")
WHERE (objects.country="54" AND objects.name>"")
GROUP BY objects.uid;
...

Leider verstehe ich nicht allzuviel von MySQL. Wenn ich das richtig interpretiere, liegt das Problem darin, daß durch den Join eine große Anzahl von Ergebniszeilen geliefert werden, für die dann wiederum Berechnungen (AVG / SUM etc.) angestellt werden. Erst durch die GROUP BY Anweisung wird das dann auf die eigentliche Ergebnismenge reduziert.

In der objects-Tabelle befinden sich etwas mehr als 2000 Einträge.

Habt Ihr eine Idee, ob und wie diese Queries optimiert werden können? Vielen Dank schonmal.
Top