Заявка като тази (извличане на всички или повечето редове) е по-бърза ако GROUP
преди да JOIN
. Като това:
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;
По този начин имате нужда от много по-малко операции за присъединяване. И редовете на таблицата cars
не е нужно първо да се умножава чрез присъединяване към много потребители всеки и след това групиране обратно, за да бъде отново уникално.
Трябва да бъде групирана само дясната таблица, което също прави логиката по-лесна.