mysql - 将非事件行移动到另一个表?

标签 mysql database database-design

我有一个表,当一行被创建时,它将在 24 小时内处于事件状态,并进行一些写入和大量读取。然后它在 24 小时后变为非事件状态,并且将不再有写入,只有一些读取(如果有的话)。

是将这些行保留在表中还是在它们变得不活动时(或通过批处理作业)将它们移动到单独的表更好?从性能的角度思考。

最佳答案

这在很大程度上取决于您的表有多大,但如果它永远增长,并且每天有大量行,那么将旧数据移动到另一个表很可能是个好主意。有几种不同的方法可以实现此目的,哪种方法最好取决于您的应用程序和数据访问模式。

  1. 基本上如您所说,当一行变为“旧”时,INSERT 到存档表,并从当前表中删除。

  2. 每天(或者可能每周或每月,具体取决于您的数据集有多大)创建一个新表,而不必担心移动旧行。在访问旧数据时,您只需查询旧表,但对于当天,您只能访问当前表。

  3. 有一个“今天”表和一个“所有时间”表。复制两个表中的“今天”行,使它们与触发器或其他机制保持同步。当某行变旧时,只需从“今天”表中删除,保留“所有时间”行。

#2 的一个优势(可能不是很明显)是我相信 MySQL 索引可以针对只读表进行优化。因此,通过从未写入的旧表,您可以利用这种额外的优化。

关于mysql - 将非事件行移动到另一个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7115616/

相关文章:

database - 维度模型中的事实表实际上是事件表吗?

mysql 查询数据库中的复选框值

mysql - MySQL性能优化的烦恼

sql - IF/ELSE 取决于存储过程的结果

database-design - 如何构建 Cross Referenceble 多语言词典数据库?

mysql - 由于外键约束,无法删除 MySQL 表

mysql - 数据建模 : use a series of BOOLs or 1 ENUM?

mysql - 什么是MySQL最好,最简单和免费的位置数据库?

mysql - 允许用户打开或关闭(基本上隐藏)任意数量的数据库字段?

sql - 加载到 Hive 表中仅将整个数据导入第一列