Pour les grands ensembles, un JOIN peut être plus performant que la sous-requête.
SELECT ma.actor
, COUNT(1) AS total
, COUNT(1) / t.cnt * 100 AS `percentage`
FROM movies_actors ma
CROSS
JOIN (SELECT COUNT(1) AS cnt FROM movies_actors) t
GROUP
BY ma.actor
, t.cnt
Pour les ensembles volumineux et lorsqu'un grand pourcentage de lignes est renvoyé, l'opération JOIN peut généralement surpasser une sous-requête. Dans votre cas, ce n'est pas une sous-requête corrélée, donc MySQL ne devrait pas avoir à l'exécuter plusieurs fois, donc cela ne fera peut-être aucune différence.
Remarque pour les non-fans de COUNT(1)
... nous pourrions remplacer toutes les occurrences de COUNT(1)
avec COUNT(*)
ou IFNULL(SUM(1),0)
pour obtenir un résultat équivalent.