MySQL(InnoDB)を使って数日間の人気ランキングを作りたいと考えてます。そのテーブル構造なんですが、どのようにすると負担が少なくできるでしょうか。
 私が考えたものは、流石に1つ1つのアクセスを単一のテーブルに保存するのは良くない気がして、以下のように数日分にまとめてみようと考えました。
 商品(items)はすごくたくさんありまして、accessesをjoinするときに7日前までの日付と下記dateを比較します。もしjoin成功した場合には下記エントリのアクセス数を表示、そうでない場合にはアクセス数を0とします。
 どんなものでしょうか。もしダメでしたら改善案をいただければと思います。

// 商品に対する日毎のアクセス数を保存
テーブル名:accesses

id primary integer auto_increment,
item_id integer, //(商品のID)
access integer, // (アクセス数)
date date, // (アクセス情報の日付)
created_at datetime, // (作成日時)
updated_at datetime, // (更新日時)


//itemsにおいて比較の方法(laravel 5コード)
$item = Item::join('accesses' function($join){
    $join->on('items.id', '=', 'accesses.item_id')
        ->where('accesses.date', '>', date('Y-m-d', strtotime('-7 days')));
})
....