Nếu bạn muốn lọc các bản ghi cho một năm cụ thể (ví dụ 2000) thì hãy tối ưu hóa WHERE
mệnh đề như sau:
SELECT MONTH(date_column), COUNT(*)
FROM date_table
WHERE date_column >= '2000-01-01' AND date_column < '2001-01-01'
GROUP BY MONTH(date_column)
-- average 0.016 sec.
Thay vì:
WHERE YEAR(date_column) = 2000
-- average 0.132 sec.
Các kết quả được tạo dựa trên bảng chứa 300k hàng và chỉ mục trên cột ngày.
Đối với GROUP BY
mệnh đề, tôi đã thử nghiệm ba biến thể so với bảng đã đề cập ở trên; đây là kết quả:
SELECT YEAR(date_column), MONTH(date_column), COUNT(*)
FROM date_table
GROUP BY YEAR(date_column), MONTH(date_column)
-- codelogic
-- average 0.250 sec.
SELECT YEAR(date_column), MONTH(date_column), COUNT(*)
FROM date_table
GROUP BY DATE_FORMAT(date_column, '%Y%m')
-- Andriy M
-- average 0.468 sec.
SELECT YEAR(date_column), MONTH(date_column), COUNT(*)
FROM date_table
GROUP BY EXTRACT(YEAR_MONTH FROM date_column)
-- fu-chi
-- average 0.203 sec.
Người cuối cùng là người chiến thắng.
GROUP BY record_date.MONTH
trong đoạn mã đầu tiên của bạn?