En forespørgsel som denne (henter alle eller de fleste rækker) er hurtigere hvis du GROUP
før du JOIN
. Sådan:
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;
På denne måde har du brug for langt færre join-operationer. Og rækkerne i tabellen cars
behøver ikke først at blive multipliceret ved at slutte sig til mange brugere hver og derefter grupperes tilbage for at være unik igen.
Kun den rigtige tabel skal grupperes, hvilket også gør logikken enklere.