存储餐厅登记计数等数据的最佳方式?

时间:2016-05-12 21:16:21

标签: php mysql database database-design relational-database

我有一个显示餐厅资料数据的页面,其中一个显示的数据是餐馆用户的总入住人数

我有一个像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,这是多余的吗?

2 个答案:

答案 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等。