Para conjuntos grandes, um JOIN pode ter um desempenho melhor que a subconsulta.
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
Para conjuntos grandes e quando uma grande porcentagem das linhas está sendo retornada, a operação JOIN geralmente pode superar uma subconsulta. No seu caso, não é uma subconsulta correlacionada, então o MySQL não deve executar isso várias vezes, então pode não fazer diferença.
Nota para não fãs de
COUNT(1)
... poderíamos substituir toda e qualquer ocorrência de COUNT(1)
com COUNT(*)
ou IFNULL(SUM(1),0)
para obter resultado equivalente.