Bei großen Mengen kann ein JOIN besser abschneiden als die Unterabfrage.
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
Bei großen Mengen und wenn ein großer Prozentsatz der Zeilen zurückgegeben wird, kann die JOIN-Operation normalerweise eine Unterabfrage übertreffen. In Ihrem Fall handelt es sich nicht um eine korrelierte Unterabfrage, daher sollte MySQL diese nicht mehrmals ausführen müssen, sodass dies möglicherweise keinen Unterschied macht.
Hinweis für Nicht-Fans von COUNT(1)
... wir könnten alle Vorkommen von COUNT(1)
ersetzen mit COUNT(*)
oder IFNULL(SUM(1),0)
um ein gleichwertiges Ergebnis zu erzielen.