我有一个表,当一行被创建时,它将在 24 小时内处于事件状态,并进行一些写入和大量读取。然后它在 24 小时后变为非事件状态,并且将不再有写入,只有一些读取(如果有的话)。
是将这些行保留在表中还是在它们变得不活动时(或通过批处理作业)将它们移动到单独的表更好?从性能的角度思考。
最佳答案
这在很大程度上取决于您的表有多大,但如果它永远增长,并且每天有大量行,那么将旧数据移动到另一个表很可能是个好主意。有几种不同的方法可以实现此目的,哪种方法最好取决于您的应用程序和数据访问模式。
基本上如您所说,当一行变为“旧”时,INSERT 到存档表,并从当前表中删除。
每天(或者可能每周或每月,具体取决于您的数据集有多大)创建一个新表,而不必担心移动旧行。在访问旧数据时,您只需查询旧表,但对于当天,您只能访问当前表。
有一个“今天”表和一个“所有时间”表。复制两个表中的“今天”行,使它们与触发器或其他机制保持同步。当某行变旧时,只需从“今天”表中删除,保留“所有时间”行。
#2 的一个优势(可能不是很明显)是我相信 MySQL 索引可以针对只读表进行优化。因此,通过从未写入的旧表,您可以利用这种额外的优化。
关于mysql - 将非事件行移动到另一个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7115616/