代码之家  ›  专栏  ›  技术社区  ›  Ovidiu Pacurar

SQL Server中的数据时间线性能

  •  0
  • Ovidiu Pacurar  · 技术社区  · 16 年前

    我有一张有三列的桌子:

    用户varchar,状态varchar,rep int

    状态和代表经常得到更新,其中一个要求是:

    为每个用户在给定日期提供日期时间值视图状态和rep值。

    我可以在datetime列中添加一个更新后的_,并插入同一用户的新行,而不是更新现有的行,但是表变大了,我需要将查询结果与其他表的类似结果连接起来,因此我需要一个快速查询。

    对于这个问题,SQL Server中的最佳解决方案是什么?

    3 回复  |  直到 16 年前
        1
  •  1
  •   Mitchel Sellers    16 年前

    根据您将如何使用报告信息,最好创建一个历史记录表,在更新主表之前,将当前值写入历史记录表,并添加时间戳。

    如果您只从历史记录中选择特定的日期/用户/状态,那么最好是这样。

        2
  •  0
  •   HLGEM    16 年前

    我将把它存储在一个单独的相关表中,因为我假设大多数时候您在加入时只查询当前状态。如果您要进行大量这种类型的查询,并将这种类型的数据添加到许多表中,而不仅仅是这个表,那么我将创建一个单独的用于报告的OLAP数据库。

    顺便说一句,只要你这样做,你可能会考虑,如果你想记录谁也做出了改变。然后您基本上构建了一个审计解决方案。

        3
  •  0
  •   Charlie    16 年前

    其中一个选项是使用两个单独的表:“当前值”表和历史表。当前值表将只包含每个用户的最新值,这将使其保持较小且易于连接。history表将包含您列出的三列以及timestamp列,并将跟踪随时间对值的更改。只要您想更改当前值表中的值,就可以使用getTime()作为时间戳,同时向历史记录表中添加一行新值。