Une requête comme celle-ci (récupérant toutes ou la plupart des lignes) est plus rapide si vous GROUP
avant de JOIN
. Comme ceci :
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;
De cette façon, vous avez besoin de beaucoup moins d'opérations de jointure. Et les lignes de la table cars
n'ont pas besoin d'être d'abord multipliés en joignant à plusieurs utilisateurs chacun, puis regroupés pour être à nouveau uniques.
Seule la bonne table doit être regroupée, ce qui simplifie également la logique.