Các truy vấn sau đây là tương đối chậm (0,7 giây với ~ 6k hàng)MySQL chậm nhóm bằng/trật tự bởi
SELECT items.*, COUNT(transactions.ID)
FROM items
INNER JOIN users ON (items.USER = users.ID)
LEFT JOIN transactions ON (items.id = transactions.item)
WHERE items.ACTIVE = 1
AND items.DELETED_AT IS NULL
GROUP BY items.ID
ORDER BY items.DATE DESC
LIMIT 20
Nhưng tốc độ tăng đáng kể khi ra lệnh bởi items.ID DESC thay vì items.DATE. Các giao dịch tham gia là một bảng lớn (~ 250k hàng) và là một-nhiều. Cột ngày tháng có chỉ mục.
Có cách nào để cải thiện tổng thể hiệu suất của ORDER BY không?
CHỈNH SỬA: lập chỉ mục trên các mục.user, transactions.item và items.date. Các mục có 49 cột, người dùng 76 và giao dịch 17.
Bạn có thể cung cấp các lược đồ và đặc biệt là các chỉ mục cho ba bảng không? – TetonSig
Điều duy nhất mà tôi có thể nghĩ đến là lần đầu tiên chọn các mục được lọc theo mệnh đề WHERE của bạn và được sắp xếp theo ngày trong truy vấn phụ, (hoặc trong một dạng xem, nếu MySQL không hỗ trợ ORDER BY trong truy vấn con), và sau đó trong một truy vấn kèm theo tham gia của bạn. (Tôi không viết câu trả lời này vì SO không khuyến khích câu trả lời đầu cơ.) –
Bạn đã thử bao gồm 'items.DATE' trong' GROUP BY' (ở vị trí đầu tiên)? –