Ich habe eine solche Abfrage:MySQL Selbstverknüpfung mit, um durch Optimierung
SELECT va.value, vc.value
FROM votingapi_cache va
LEFT JOIN votingapi_cache vc ON vc.content_id = va.content_id
WHERE va.content_type = 'node' AND va.value_type = 'percent' AND va.tag = 'vote' AND va.function = 'average' AND vc.content_type = 'node' AND vc.tag = 'vote' AND vc.function = 'count'
ORDER BY va.value DESC, vc.value DESC LIMIT 0, 10
ERKLÄREN sagt mir, dass diese Abfrage temporäre und filesort verwendet. Es läuft fast 10s auf dem Tisch mit 500k Zeilen. Wie kann es optimiert werden?
Schema:
Indizes:
Nach Vorschläge von Joachim Isaksson gegeben, keine Leistungsverbesserungen, ERKLÄREN:
Welche Indizes haben Sie auf dem Tisch? –
Ich gehe davon aus, dass es einen guten Grund gibt, warum Durchschnitt und Anzahl nicht durch Aggregatfunktionen berechnet werden. – bernie
Es ist eigentlich eine Drupal-Votingapi-Modul-Tabelle (es gibt eine andere Tabelle votingapi_vote, die alle Stimmen enthält - etwa 18 Millionen Zeilen), die bereits aggregierte und zwischengespeicherte Ergebnisse enthält. – breethe