1

我正在使用 SQL Server 2017 并尝试使用时态表,以便跟踪数据的历史更改。我以前从未使用过时态表,但过去我用传统表创建了许多 ETL 流程,并试图了解如何优化将数据加载到最终表中。传统上,当我编写 ETL 时(当我说传统时,我的意思是当我不使用时态表时),为了提高性能,我通常会删除表上的所有索引,然后批量加载我拥有的 1000 万左右的记录最终表,加载完成后,我将索引重新应用于表。

我想知道是否可以使用临时表来执行此操作?在使用临时表加载或更新数据时,为了保留表的历史记录,似乎我需要有一个主键。但是,如果我无法删除索引,那么在批量加载时我似乎会受到性能影响,对吧?如果在使用临时表历史记录时不能删除索引,如何减少加载表的时间?

4

1 回答 1

0

系统版本表不需要匹配主表上的索引。您可以安全地删除/禁用要插入记录的表上的非聚集索引。您也可以检查要求

临时表对于某些场景很有用,但我没有在 ETL 过程中使用它们。检查列存储索引可能会更好。如果您使用列存储索引创建历史表,则可以选择归档压缩。然后,只用 插入新的 1000 万batch ID。数据足迹将非常小。

当然,如果你需要经常查询历史表并使用system-versioning特殊语法,使用列存储可能会损害性能。

于 2020-06-16T05:54:29.560 回答