หากคุณต้องการกรองระเบียนสำหรับปีเฉพาะ (เช่น 2000) ให้ปรับWHERE
ข้อเช่นนี้:
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.
แทน:
WHERE YEAR(date_column) = 2000
-- average 0.132 sec.
ผลลัพธ์ถูกสร้างขึ้นจากตารางที่มีแถว 300k และดัชนีในคอลัมน์วันที่
สำหรับGROUP BY
ข้อฉันทดสอบสามตัวแปรกับตารางที่กล่าวถึงข้างต้น นี่คือผลลัพธ์:
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.
สุดท้ายคือผู้ชนะ
GROUP BY record_date.MONTH
ในข้อมูลโค้ดแรกของคุณ