我有一个包含任务的表。一些任务是新的或正在进行的阶段,但其他任务将处于归档阶段,这意味着它们已被处理并且返回它们的机会很低。我在想将存档的任务放在具有相同架构的单独表中是明智的,这样对“当前”任务的查询会更快。这样对吗?
如果我需要使用存档任务(例如在搜索结果中)显示当前任务,我将简单地合并这两个表。
这是正确的吗?我会获得任何好处吗?我认为这被称为水平碎片。我正在使用 MySQL InnoDB。为了真正获得性能优势,我是否需要对表定义做一些额外的事情?
谢谢!!
我有一个包含任务的表。一些任务是新的或正在进行的阶段,但其他任务将处于归档阶段,这意味着它们已被处理并且返回它们的机会很低。我在想将存档的任务放在具有相同架构的单独表中是明智的,这样对“当前”任务的查询会更快。这样对吗?
如果我需要使用存档任务(例如在搜索结果中)显示当前任务,我将简单地合并这两个表。
这是正确的吗?我会获得任何好处吗?我认为这被称为水平碎片。我正在使用 MySQL InnoDB。为了真正获得性能优势,我是否需要对表定义做一些额外的事情?
谢谢!!
具有相同架构的单独表
我不确定这是否是一个好主意,记住,DRY(不要重复自己)。如果您必须更改其中一个的架构,则必须更改另一个的架构,这可能会导致错误。
还,
过早优化是万恶之源
您的数据库查询当前运行速度是否太慢?我猜他们不是。
分区是一种解决像您这样的特定要求的技术。基本上,您可以根据数据中的度量(例如日期)对数据进行逻辑分离。
但是,如果您不愿意对表进行分区,明智的做法是将任务分成两个表,以提高整体吞吐量,前提是您需要对当前任务进行频繁的表扫描,或者出于任何原因,您正在不愿意在表上创建索引(例如,由于难以预测查询类型)。在这种情况下,这种分离将有助于将当前任务的表大小保持在最小。因此,可以改进通常需要全表扫描的查询(特别是对于即席查询)。
但是,请注意,随着时间的推移,归档任务表的大小也会增长,这种增长会影响针对该表运行的查询的性能,并且可能需要在归档表上创建一些索引.