W przypadku dużych zestawów JOIN może działać lepiej niż podzapytanie.
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
W przypadku dużych zestawów i gdy zwracany jest duży procent wierszy, operacja JOIN może zwykle przewyższać podzapytanie. W twoim przypadku nie jest to skorelowane podzapytanie, więc MySQL nie powinien wykonywać tego wiele razy, więc może to nie robić żadnej różnicy.
Uwaga dla osób, które nie są fanami COUNT(1)
... możemy zastąpić dowolne i wszystkie wystąpienia COUNT(1)
z COUNT(*)
lub IFNULL(SUM(1),0)
aby osiągnąć równoważny wynik.