Una consulta como esta (recuperar todas o la mayoría de las filas) es más rápida si GROUP
antes de JOIN
. Así:
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 esta forma, necesitará muchas menos operaciones de unión. Y las filas de la tabla cars
no tienen que multiplicarse primero uniéndose a muchos usuarios cada uno y luego volver a agruparse para volver a ser únicos.
Solo se debe agrupar la tabla correcta, lo que también simplifica la lógica.