在另一个表中复制数据以提高性能

ws51t4hk  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(333)

我目前正在为正在构建的产品设计数据库体系结构。在mysql中创建所有内容之前,我只是在excel文件中绘制所有内容。
目前,我有两个几乎完全相同的表。 TABLE A 包含每个用户的每个数据点的最新值的。 TABLE B 它包含每个用户的每个数据点的每日记录。
我创作的理由 TABLE A ,而不是仅仅依靠 TABLE B ,是中的行数吗 TABLE B 我的客户数量每天都在增长。例如,假设我有20000个客户, TABLE B 每天将增加20000行。所以通过创造 TABLE A ,我只需搜索20000条记录就可以找到每个用户每个数据点的最新值,因为我每天都会更新这些值;鉴于 TABLE B ,我必须在不断增加的行中搜索每个用户最近插入的内容。
这是可以接受的还是良好的做法?
或者我应该忘记 TABLE A 减少数据库中的“膨胀”?

biswetbf

biswetbf1#

在同时需要“当前”数据和“历史”的情况下,我就是这样做的——一个表包含当前数据,一个表包含历史。它们可能因为不同的用法等而被不同的索引。
我会想清楚“历史”和“当前”有什么不同,然后使表格不同而不是完全相同。
当一个新记录出现时(在你的例子中是2万行),我至少会把它放到 Current . 我也可以写信给你 History ,从而保持其完整性(以少量冗余为代价)。或者我可以将行移到 History 当下一行进入 Current .
我看没有必要 PARTITIONing 除非我打算清除“旧”数据。如果那样的话,我会用 PARTITION BY RANGE(TO_DAYS(..)) 并选择每周/每月/以分区数不超过50为准(如果你选择“每日”, History 几个月后会慢下来,只是因为分区。)
每天2万排——其中有很多是从昨天开始就没有变化的吗?那可能不是正确的做事方式。请详细说明每天发生的事情。您应该避免在中有重复的行 History (日期除外)。

bq8i3lrv

bq8i3lrv2#

这不是正确的方法。你基本上有两个合理的选择:
使用历史记录表上的索引来访问最近一天的记录。
使用表分区将每天存储在一个单独的分区中。
您可以管理两个表,但这是一个很大的麻烦,并且有内置的方法来处理这种情况。

相关问题