我目前正在为正在构建的产品设计数据库体系结构。在mysql中创建所有内容之前,我只是在excel文件中绘制所有内容。
目前,我有两个几乎完全相同的表。 TABLE A
包含每个用户的每个数据点的最新值的。 TABLE B
它包含每个用户的每个数据点的每日记录。
我创作的理由 TABLE A
,而不是仅仅依靠 TABLE B
,是中的行数吗 TABLE B
我的客户数量每天都在增长。例如,假设我有20000个客户, TABLE B
每天将增加20000行。所以通过创造 TABLE A
,我只需搜索20000条记录就可以找到每个用户每个数据点的最新值,因为我每天都会更新这些值;鉴于 TABLE B
,我必须在不断增加的行中搜索每个用户最近插入的内容。
这是可以接受的还是良好的做法?
或者我应该忘记 TABLE A
减少数据库中的“膨胀”?
2条答案
按热度按时间biswetbf1#
在同时需要“当前”数据和“历史”的情况下,我就是这样做的——一个表包含当前数据,一个表包含历史。它们可能因为不同的用法等而被不同的索引。
我会想清楚“历史”和“当前”有什么不同,然后使表格不同而不是完全相同。
当一个新记录出现时(在你的例子中是2万行),我至少会把它放到
Current
. 我也可以写信给你History
,从而保持其完整性(以少量冗余为代价)。或者我可以将行移到History
当下一行进入Current
.我看没有必要
PARTITIONing
除非我打算清除“旧”数据。如果那样的话,我会用PARTITION BY RANGE(TO_DAYS(..))
并选择每周/每月/以分区数不超过50为准(如果你选择“每日”,History
几个月后会慢下来,只是因为分区。)每天2万排——其中有很多是从昨天开始就没有变化的吗?那可能不是正确的做事方式。请详细说明每天发生的事情。您应该避免在中有重复的行
History
(日期除外)。bq8i3lrv2#
这不是正确的方法。你基本上有两个合理的选择:
使用历史记录表上的索引来访问最近一天的记录。
使用表分区将每天存储在一个单独的分区中。
您可以管理两个表,但这是一个很大的麻烦,并且有内置的方法来处理这种情况。