Voor grote sets kan een JOIN beter presteren dan de subquery.
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
Voor grote sets, en wanneer een groot percentage van de rijen wordt geretourneerd, kan de JOIN-bewerking meestal beter presteren dan een subquery. In jouw geval is het geen gecorreleerde subquery, dus MySQL zou dat niet meerdere keren moeten uitvoeren, dus het maakt misschien geen verschil.
Opmerking voor niet-fans van COUNT(1)
... we kunnen alle exemplaren van COUNT(1)
. vervangen met COUNT(*)
of IFNULL(SUM(1),0)
om een gelijkwaardig resultaat te bereiken.