2

我正在使用 SQL Server 2008 中的一个大表(约 100.000.000 行)。我经常需要在该表中添加和删除约 30.000.000 行的批次。目前,在将大批量加载到表中之前,我禁用索引,插入数据,然后重建索引。我测量这是最快的方法。

从最近开始,我正在考虑在这个表上实现表分区以提高速度。我将根据我的批次对表进行分区。

我的问题是,是否可以禁用一个特定分区的索引,并在再次启用之前将数据加载到该分区中?在这种情况下,我的表的其余部分将不必遭受完整的索引重建,并且我的加载可以更快?

4

1 回答 1

3

索引通常位于分区方案上。对于您正在谈论的场景,您实际上可以使用批处理(相同的结构,不同的名称)加载一个新表,然后使用 SWITCH 命令将此表作为新分区添加到现有表中。

我已经包含了我用来执行此操作的代码,您需要根据您的表名对其进行修改:

DECLARE @importPart int
DECLARE @hourlyPart int

SET @importPart = 2 -- always, so long as the Import table is only made up of 1 partition

-- get the Hourly partition
SELECT 
    @hourlyPart = MAX(V.boundary_id) + 1
FROM 
    sys.partition_range_values V
JOIN    sys.partition_functions F
    ON  V.function_id = F.function_id
    AND F.name = 'pfHourly'

ALTER TABLE Import
SWITCH PARTITION @importPart
TO Hourly PARTITION @hourlyPart;
于 2010-12-08T21:00:21.033 回答