我在 SQL Server 中有一个大表(大约 55 亿行),我打算为该数据创建新的分区表,可能按年创建,并为每年创建文件组,以便更好地管理。这是包含事务数据的事实表,每天加载(大约 700 万行),不经常查询,也从不更新。我的想法是在新表中加载数据并使过去数据的文件组只读。
问题是在新表中加载数据的最佳方式是什么。我应该加载到堆表中然后创建CCI还是在加载数据之前创建CCI?我还应该考虑其他事项吗?
我在 SQL Server 中有一个大表(大约 55 亿行),我打算为该数据创建新的分区表,可能按年创建,并为每年创建文件组,以便更好地管理。这是包含事务数据的事实表,每天加载(大约 700 万行),不经常查询,也从不更新。我的想法是在新表中加载数据并使过去数据的文件组只读。
问题是在新表中加载数据的最佳方式是什么。我应该加载到堆表中然后创建CCI还是在加载数据之前创建CCI?我还应该考虑其他事项吗?
和
意味着您应该按照分区方案创建集群表。如果您首先创建分区堆,一旦在其上创建聚集索引,您的分区就会消失,并且在具有 55 亿行的堆上的分区方案上创建聚集索引将花费太多时间,并且您的数据库日志可能会增长很多你只是无法期望如何。
因此,您应该首先在分区方案上创建空的聚集表。然后,我将在要移动数据的分区所在的同一文件组上创建一个临时表来容纳一年的数据。例如,您的第一个分区计划用于 2015 年,请通过执行
select ... into myStagingTbl from myTbl where year = 2015.
Create clustered index on this table and create check constraint: 在同一文件组上创建临时表year = 2015
。现在您可以将 myStagingTbl 切换到空分区表。对每个分区重复此操作。