このようなクエリ(すべてまたはほとんどの行を取得する)は高速 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
最初に多くのユーザーに参加して乗算し、次にグループ化して再度一意にする必要はありません。
グループ化する必要があるのは適切なテーブルのみであるため、ロジックも単純になります。