我有一个显示餐厅概要数据的页面,其中一个显示的数据是该餐厅的用户签到总数
我有一个mysql表,比如:user_checkins,它存储用户到餐厅的签到信息,比如:
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,定期(如每天)删除reach餐厅的旧行,并在另一个只存储每个餐厅的total_checkin_count的mysql表中更新餐厅的total_checkin_count编号?这会消耗大量内存吗?
或
我保留行,让它累积,并使用SELECT COUNT(*) all来获取每个餐厅的total_checkin_count
编辑:user_checkins表实际上存储了不同餐厅的所有用户签到,每次有人访问'restaurant_profile‘网页时,SELECT COUNT(*)查询将在res_id x的user_checkins表上运行,以获取该餐厅的total checkin count,这是多余的吗?
发布于 2016-05-13 05:33:57
当您说很多行时,您需要评估是否有很多行超出了MySQL的能力。一般而言,MySQL应该能够轻松地处理每个表1亿行的数据。您是否期望在不久的将来超过1亿行?如果不是,那就不要去管你的数据,这会降低存档系统的复杂性。
另一方面,如果您希望表中的行数超过数亿行,那么是的,运行每日作业来删除或归档您的数据有助于保持数据库的良好运行。
发布于 2016-05-13 05:34:01
在我看来,这些表是在MySQL中的,但是我会去掉res_checkin_count是一个聚合函数的副本,它是一个计数,所以你在浪费内存,所以只能有两种情况:
1您的user_checkins表没有超过200万条记录,并且您为列res_id创建了nuncluster索引,这样就可以了。
2你有一个巨大的网站,你在其中存储了超过200万条活动记录,并且你为每个州或每个砖块(3到5个邮政编码)创建了表,这样你就有了分布的记录,最有可能的是人们从TX搜索和查询TX上的餐厅,等等。
https://stackoverflow.com/questions/37197532
复制相似问题