创建“归档表”

时间:2013-12-20 09:50:27

标签: mysql sql performance archive database-fragmentation

我有一个表,包含,比方说,任务。有些任务是新的或处于进行中的阶段,但其他任务将处于存档阶段,这意味着它们已被处理并且返回它们的机会很低。我当时认为将存档的任务放在具有相同模式的单独表中是明智的,这样对“当前”任务的查询就会更快。是不是?

如果我需要使用存档任务(例如搜索结果)启动当前任务,我将简单地将两个表联合起来。

这是对的吗?我会获得任何好处吗?我认为它被称为横向碎片。我正在使用MySQL InnoDB。我是否需要为表定义做一些额外的工作才能真正获得性能优势?

谢谢!

2 个答案:

答案 0 :(得分:3)

  

具有相同架构的单独表

我不确定这是一个好主意,请记住,干(不要重复自己)。如果您必须更改一个架构,则必须更改另一个架构,这可能会导致错误。

另外,

  

过早优化是万恶之源

您的数据库查询当前运行速度是否太慢?我猜他们不是。

答案 1 :(得分:1)

Partitioning是一种解决像您这样的特定要求的技术。基本上,您可以根据日期等数据中的度量对数据进行逻辑分离。

但是,如果您不愿意对表进行分区,则明智的做法是将任务分成两个表,目的是提高总吞吐量假设,您需要对当前频率进行频繁的表扫描任务或者由于任何原因,您不愿意在表上创建索引(例如,由于难以预测查询类型)。在这种情况下,这种分离将有助于将当前任务的表大小保持在最小。因此,通常需要全表扫描的查询可以得到改进(特别是对于即席查询)。

但是,请注意,随着时间的推移,存档任务表的大小也会增加,这种增长会影响针对此表运行的查询的性能,并且可能需要创建一些索引。档案表。