Zapytanie takie jak to (pobieranie wszystkich lub większości wierszy) jest szybsze jeśli GROUP
zanim JOIN
. Tak:
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;
W ten sposób potrzebujesz znacznie mniej operacji łączenia. I wiersze tabeli cars
nie trzeba najpierw mnożyć, łącząc się z wieloma użytkownikami, a następnie grupować z powrotem, aby ponownie były niepowtarzalne.
Tylko właściwa tabela musi być pogrupowana, co również upraszcza logikę.