Tôi đã xây dựng một diễn đàn tùy chỉnh cho trang web của mình bằng cách sử dụng MySQL. Trang danh sách về bản chất là một bảng có các cột sau: Chủ đề, Cập nhật lần cuối và # Trả lời.Tối ưu hóa truy vấn MySQL để tránh "Sử dụng ở đâu; Sử dụng tạm thời; Sử dụng filesort"
Các DB bảng có các cột sau:
id
name
body
date
topic_id
email
Một chủ đề có topic_id "0", và trả lời có topic_id của chủ đề cha mẹ của họ.
SELECT SQL_CALC_FOUND_ROWS
t.id, t.name, MAX(COALESCE(r.date, t.date)) AS date, COUNT(r.id) AS replies
FROM
wp_pod_tbl_forum t
LEFT OUTER JOIN
wp_pod_tbl_forum r ON (r.topic_id = t.id)
WHERE
t.topic_id = 0
GROUP BY
t.id
ORDER BY
date DESC LIMIT 0,20;
Có khoảng 2.100 tổng số mục trong bảng này và các truy vấn thường mất đến 6 giây. Tôi đã thêm một INDEX vào cột "topic_id", nhưng điều đó không giúp được gì nhiều. Có cách nào để tăng tốc truy vấn này với việc thực hiện tái cơ cấu đáng kể không?
EDIT: chưa hoạt động. Tôi dường như không thể lấy các ví dụ bên dưới để hoạt động bình thường.
Cột 'ngày' trong danh sách trường không rõ ràng ..? – Matt
@Matt: xem cập nhật – Quassnoi
@Quassnoi - bạn có thể giải thích những gì đang diễn ra không? "UNION ALL" có thay thế "last_reply" bằng "date" nếu chủ đề không có trả lời không? – Matt