Una query come questa (che recupera tutte o la maggior parte delle righe) è più veloce se GROUP
prima di JOIN
. In questo modo:
SELECT id, name, created_at, updated_at, u.ct
FROM cars c
LEFT JOIN (
SELECT car_id, count(*) AS ct
FROM users
GROUP BY 1
) u ON u.car_id = c.id
ORDER BY u.ct DESC;
In questo modo sono necessarie molte meno operazioni di unione. E le righe della tabella cars
non deve essere prima moltiplicato unendosi a più utenti ciascuno e poi raggruppato di nuovo per essere di nuovo unico.
È necessario raggruppare solo la tabella giusta, il che semplifica anche la logica.