提问者:小点点

在MySQL数据库中使用历史数据的最佳实践


最近我考虑了在MySQL数据库中存储历史数据的最佳实践。目前,每个可版本表都有两列-valid_fromvalid_to,都是datetime类型。具有当前数据的记录的valid_from填充了其创建日期。当我更新此行时,我将valid_to填充更新日期,并使用valid_from添加新记录,与前一行中的valid_to相同-简单的操作。但是我知道这个表会非常大,非常快,所以获取数据会非常慢。
我想知道您是否有存储历史数据的实践?


共1个答案

匿名用户

担心“大”表和性能是一个常见的错误。如果您可以使用索引来访问数据,那么如果您有1000000个记录中的1000个,这并不重要--至少不是因为您能够测量。你提到的设计是常用的;这是一个伟大的设计,其中时间是业务逻辑的关键部分。

例如,如果您想知道客户机下订单时一个项目的价格是多少,那么能够搜索valid_fromorder_date的产品记录是最简单的解决方案。

这种情况并不总是如此--如果您只是为了归档而保留数据,那么创建归档表可能更有意义。但是,您必须确保时间确实不是业务逻辑的一部分,否则搜索多个表的痛苦将是巨大的--想象一下,每次您想要了解产品在下订单时的价格时,都必须搜索product表或product_archive表。