Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Sql Server中的数据时间轴性能_Sql Server_Performance_Datetime_Timeline - Fatal编程技术网

Sql server Sql Server中的数据时间轴性能

Sql server Sql Server中的数据时间轴性能,sql-server,performance,datetime,timeline,Sql Server,Performance,Datetime,Timeline,我有一个有三列的表: 用户varchar、状态varchar、rep int 状态和代表经常更新,其中一项要求是: 给定日期时间值查看每个用户在给定日期的状态和代表值。 我可以向表中添加一个updated_at datetime列,并插入同一用户的新行,而不是更新现有行,但是表变大了,我需要将查询结果与其他表中的类似结果连接起来,因此我需要快速查询 SQL Server中解决此问题的最佳解决方案是什么?根据报告信息的具体使用方式,最好创建一个历史记录表,在更新主表之前,将当前值写入历史记录表,并

我有一个有三列的表:

用户varchar、状态varchar、rep int

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

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

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


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

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


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

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


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

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