Wenn Sie Datensätze für ein bestimmtes Jahr (z. B. 2000) filtern möchten, optimieren Sie die WHERE
Klausel wie diese:
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.
Anstelle von:
WHERE YEAR(date_column) = 2000
-- average 0.132 sec.
Die Ergebnisse wurden anhand einer Tabelle mit 300k Zeilen und einem Index für die Datumsspalte erstellt.
Was die GROUP BY
Klausel habe ich die drei Varianten anhand der oben genannten Tabelle getestet; hier sind die Ergebnisse:
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.
Der letzte ist der Gewinner.