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()); |