次のテーブル構造で履歴を保持することを考えていました。
`id` bigint unsigned not null auto_increment,
`userid` bigint unsigned not null,
`date` date not null,
`points_earned` int unsigned not null,
primary key (`id`),
key `userid` (`userid`),
key `date` (`date`)
これにより、SO が Reputation Graph を使用して行っているようなことを行うことができます (ここで、サイトに参加してからの担当者の増加を確認できます)。
ただし、ここに問題があります。単純な計算を実行しただけです。
SELECT SUN(DATEDIFF(`lastclick`,`registered`)) FROM `users`
その結果は、25,000,000 人日とほとんど差がありませんでした。ユーザーごとに 1 日 1 行を保持するつもりなら、それは [罵倒] の大きなテーブルであり、さらなる成長を期待しています。ユーザーがオンラインにならない日を除いても、それは膨大な量です。
このような大量のデータを維持するためのアドバイスを提供できる人はいますか? このテーブルで実行される唯一のクエリは次のとおりです。
SELECT * FROM `history` WHERE `userid`=?
SELECT SUM(`points_earned`) FROM `history` WHERE `userid`=? AND `date`>?
INSERT INTO `history` VALUES (null,?,?,?)
ARCHIVE
たとえば、エンジンはここで役に立ちますか? それとも、インデックスのために心配する必要はありませんか?