Jika Anda ingin memfilter catatan untuk tahun tertentu (mis. 2000), maka optimalkan WHERE
klausa seperti ini:
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.
Dari pada:
WHERE YEAR(date_column) = 2000
-- average 0.132 sec.
Hasilnya dihasilkan terhadap tabel yang berisi 300 ribu baris dan indeks pada kolom tanggal.
Adapun GROUP BY
klausa, saya menguji tiga varian terhadap tabel yang disebutkan di atas; berikut hasilnya:
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.
Yang terakhir adalah pemenangnya.
GROUP BY record_date.MONTH
dalam cuplikan kode pertama Anda?