MySQL
【Mysql】date型 集計するなら EXTRACT
 
								ヤス
更新日:2021/08/10
タイトルが俳句みたいになってしまいました。ヤスです。
最近はいろいろあってログデータと格闘する日々が続いております。
月次や日次、年月別で集計といった風にSQLを書く時に、いつも「DATE_FORMAT」関数を使用していました。
↓こんな感じで
| 1 2 | SELECT DATE_FORMAT(hoge_datetime, "%Y%m") FROM hogehoge GROUP BY DATE_FORMAT(hoge_datetime, "%Y%m")  Query took 1.8660 seconds. | 
小さいデータならよゆーでしたが、ビッグなデータだと遅い。。そんな時には以下の方法があることに気がつきました。
EXTRACTを使って処理速度を上げる
| 1 2 | SELECT EXTRACT(YEAR_MONTH from hoge_datetime) FROM hogehoge GROUP BY EXTRACT(YEAR_MONTH from hoge_datetime)   Query took 0.6447 seconds. | 
なんと、倍速で処理されました!こんな関数があったとは、DATE_FORMATは文字列も解釈するため遅いそうな。。
これからはEXTRACTの時代と信じます。年月以外も取得できるよ↓
| 1 2 3 4 5 6 | select extract(year from now());  select extract(month from now());  select extract(day from now());  select extract(hour from now());  select extract(minute from now()); select extract(second from now()); |