申し訳ない。私の書き方が悪かったのかもしれないです
GROUP BY に式を入れないほうがいいというのは
SELECT DATE_FORMAT(カラム,'%Y%m') AS m,COUNT(*) AS COUNT FROM テーブル
GROUP BY DATE_FORMAT(カラム,'%Y%m');
と書くのではなく、2度同じ式をかかずに
SELECT DATE_FORMAT(カラム,'%Y%m') AS m,COUNT(*) AS COUNT FROM テーブル
GROUP BY m;
というように、SELECT句でつけた別名でGROUP BYをするようにという意味です。
ちなみに以下サンプル
SQL
1CREATE TABLE hoge (id int not null primary key,d date,index(d),ym date,index(ym),yw date,index(yw));
2INSERT INTO hoge(id,d) value(1,'2016-06-01'),(2,'2016-06-02'),(3,'2016-06-02'),(4,'2016-06-10'),(5,'2016-07-01'),(6,'2016-08-01');
3UPDATE hoge SET ym= DATE_FORMAT(d,'%Y-%m-01'),yw= d - INTERVAL DATE_FORMAT(d,'%w') day;
とした時、
SELECT DATE_FORMAT(d,'%Y-%m-01') AS m,COUNT(*) FROM hoge GROUP BY m;
とするより
SELECT ym,COUNT(*) FROM hoge GROUP BY ym;
の方が理論的に高速です。(EXPLAINなどで確認してみてください)
この様に検索単位が決まっているのであれば、予めグルーピング用のカラムを設定しておく
と効率的という意図です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/21 15:39
2016/07/22 01:13
2016/07/22 09:18