我有一个关于我的 MySQL 数据库的问题,想了解什么是最有效的。
我的问题如下,
我正在为我的棋盘游戏网站开发高级功能。一项高级功能是用户玩过的所有游戏都将被“永久”存储(供用户以后查找)。对于普通用户,超过 18 个月的游戏将被删除。
现在我需要找到一种有效的方法来删除普通非高级用户的游戏(超过 18 个月)并为高级用户保留游戏。
简化事情我得到了两张桌子(实际上还有一张桌子用于存储每个游戏的游戏参与者):
游戏,
id=INT
play_date=DATETIME
end_score=INT
player_id_1=INT
player_id_2=INT
用户,
id=INT
premium=BOOLEAN (true=enabled, false=not enabled)
user 表包含 300.000+ 行,而 Games 表包含几百万行。每天大约有 20.000 场比赛被添加到游戏表中。
从非高级用户那里删除超过 18 个月的游戏的最有效方法是什么。
到目前为止,我们已经在每个星期一早上为所有用户删除了 18 个月以上的游戏。
现在我需要考虑溢价和游戏日期。
一些解决方案(?):
- 加入表格,尽管我们在 Games 表格中谈论数百万行,这将是一个禁忌?
- 获取超过 18 个月的每个游戏条目,然后从 player_id_1 和 player_id_2 获取每个用户条目,如果其中任何一个是高级的,让游戏成为,否则如果它超过 18 个月,则将其删除。因此,在一周内,这可能是 20k*7=140k 的游戏价值。
- 上面的解决方案,除了我每小时做一次。然后我需要获取和检查大约 1000 个游戏。
- ?? 在 Games 表中添加某种辅助变量?但是如果用户停止使用高级版怎么办......
欢迎任何提示...