現在、簡単なアクセス解析を作っておりまして
ユーザーのアクセスしたレコード(accessanalyz_table)100万レコードほど
から期間指定した範囲を取得した後、
日付の連番に整形し、
- ユニークユーザー
- 観覧数
一覧を取得するSQL文を書いたのですが、
私の書き方ではとてもスピードが遅く。
indexの付け方や、
構造の書き換えを試してみたのですが、
スピードが変えることができませんでした。
もしチューニングできる部分や、
構造的に早くなる部分があればご指摘いただければ幸いです。
SELECT `date`, count(`id`) as `view_num`, count(distinct `user_cookie_id`) as `user_num` FROM ( select DATE_ADD("2019-08-26", INTERVAL (@i := @i + 1) -1 day) as `date` FROM `information_schema`.`columns`, (![イメージ説明](4b7750c5d1c4e12e61fc188fbd72e4b0.png) SELECT @i := 0 ) `gen_sub` WHERE DATE_ADD("2019-08-26", INTERVAL @i day) BETWEEN "2019-08-26" AND "2019-09-02" ) `date_generator` left join( select `day`, `id`, `user_cookie_id` FROM `accessanalyz_table` WHERE `day` BETWEEN "2019-08-26" AND "2019-09-02" + interval 1 day ) `myaccess` on DATE_FORMAT(`date_generator`.`date`, "%Y%m%d") = DATE_FORMAT(`myaccess`.`day`, "%Y%m%d") GROUP BY `date` ORDER BY `date` ASC
accessanalyz_table
試した事
Explanを行ったところ2行目のrowsが多い部分のrypeがALLになっていましたが、
こちらどのようにindexをつけるかわかりませんでした。
環境
- PHP 7.3.9
- phpMyAdmin 5.7.26
を使っております。
改善後のExplan
回答1件
あなたの回答
tips
プレビュー