2008-10-29 49 views
0

我有三列的表:数据时间表性能

用户VARCHAR,状态VARCHAR,代表INT

地位和声誉得到经常和要求之一是更新:

给定每个用户在给定日期的日期时间值查看状态和代表值。

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

什么是SQL Server中对此问题的最佳性能解决方案?

回答

1

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

这将是最好的,如果你真的只从历史挑出特定的天/用户/状态

0

我将存储这是一个单独的相关表,因为我相信你们中的大多数将只查询时间加入时的当前状态。如果你要做很多这种类型的查询,并将这种类型的数据添加到许多表格中,而不仅仅是这一种,我将创建一个单独的OLAP数据库用于报告。

顺便说一句,只要你这样做,你可能会考虑是否要记录谁做出了这个改变。那么你基本上已经建立了一个审计解决方案。

0

对此的一个选择是使用两个单独的表格:“当前值”表格和历史表格。当前值表格将包含每个用户的唯一最新值,这将使其保持较小且易于连接。历史记录表格将包含您列出的三列以及时间戳列,并且会跟踪随时间变化的值。无论何时您想要更改当前值表中的值,都可以使用gettime()作为时间戳同时将新值添加到历史记录表中。