Truy vấn như thế này (truy xuất tất cả hoặc hầu hết các hàng) nhanh hơn nếu bạn GROUP
trước khi bạn JOIN
. Như thế này:
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;
Bằng cách này, bạn cần ít thao tác tham gia hơn. Và các hàng của bảng cars
không cần phải được nhân trước bằng cách tham gia với nhiều người dùng và sau đó được nhóm lại để trở thành duy nhất.
Chỉ có bảng bên phải được nhóm lại, điều này cũng làm cho logic đơn giản hơn.