J'ai une telle requête:MySQL autojointure avec commande par l'optimisation
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
EXPLIQUEZ me dit que cette requête utilise temporaire et filesort. Il court près de 10 sur la table avec 500k lignes. Comment cela peut-il être optimisé?
schéma:
Index:
Après des suggestions données par Joachim Isaksson, aucune amélioration de la performance, EXPLAIN:
Quels indices avez-vous sur la table? –
Je vais supposer qu'il y a une bonne raison pour laquelle la moyenne et le nombre ne sont pas calculés par les fonctions agrégées. – bernie
C'est en fait une table de module de voteapi de Drupal (il y a une autre table de voteapi_vote qui contient tous les votes - environ 18 millions de lignes), qui contient déjà des résultats agrégés et mis en cache. – breethe