Per set di grandi dimensioni, un JOIN può avere prestazioni migliori rispetto alla sottoquery.
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
Per set di grandi dimensioni e quando viene restituita una grande percentuale di righe, l'operazione JOIN può in genere superare una sottoquery. Nel tuo caso, non è una sottoquery correlata, quindi MySQL non dovrebbe doverlo eseguire più volte, quindi potrebbe non fare alcuna differenza.
Nota per i non fan di COUNT(1)
... potremmo sostituire tutte le occorrenze di COUNT(1)
con COUNT(*)
o IFNULL(SUM(1),0)
per ottenere un risultato equivalente.