我有一个显示餐厅资料数据的页面,其中一个显示的数据是餐馆用户的总入住人数
我有一个像user_checkins
这样的mysql表,它将用户的签入存储到以下餐馆:
id | user_id | res_id | checkin_date |
1 | 102 | 5526 | 2016-04-21 03:20:21 |
2 | 165 | 5574 | 2016-04-21 06:35:21 |
3 | 102 | 4565 | 2016-04-24 02:15:30 |
和另一个表res_checkin_count
:
id | res_id | total_checkin_count |
1 | 5526 | 1055 |
一段时间之后会在user_checkins
中创建很多行,因为人们经常检查
问题:我应该删除旧行吗?比如创建一个cronjob,定期删除旧行(比如每天)到达餐馆,并在另一个只存储每个餐馆的total_checkin_count
的mysql表中更新餐馆total_checkin_count
号码?这会消耗很多内存吗?
或
我保留行并让它累积并使用SELECT COUNT(*)
全部来获取每个餐馆total_checkin_count
?
编辑:user_checkins
表实际存储了各个餐馆的所有用户签到,每当有人访问'restaurant_profile'网页时,SELECT COUNT(*)
查询将在user_checkins
表上运行res_id
1}} x,要获得该餐厅的total checkin count
,这是多余的吗?
答案 0 :(得分:0)
当你说很多行时,你需要评估是否有许多行超出了MySQL的能力。一般来说,MySQL应该能够轻松地处理每个表1亿行的顺序。您是否希望很快超过1亿行?如果没有,那么请单独保留数据,这样可以降低归档系统的复杂性。
另一方面,如果您希望表上有超过数亿行,那么是的,运行每日作业来删除或存档数据可能有助于保持数据库正常运行。
答案 1 :(得分:0)
在我看来这些表是在MySQL中,但是我只是摆脱res_checkin_count是一个复合函数的副本,这是COUNT所以你浪费内存,所以只能有2个场景:
1你的user_checkins表记录的记录不超过200万,你可以为列res_id创建nuncluster索引,并且没问题。
2你有一个Monstrous网站,你存储超过200万活跃记录,你创建每个州或每块砖(3到5个邮政编码)的表格,这样你将有分布式记录,人们最有可能搜索和查询餐馆来自TX等。