2010-05-05 54 views
2

我正在SQL Server 2008中使用一个大表(〜100.000.000行)。通常,我需要添加和删除~30.000.000行的批以及从这张桌子。目前,在将大批量加载到表格之前,我禁用索引,插入数据,然后重建索引。我已经衡量这是最快的方法。SQL Server 2008:在一个特定的表分区上禁用索引

由于最近,我正在考虑在此表上实施表分区来提高速度。我将按照我的批次分割桌子。

我的问题,是否可以禁用某个特定分区的索引,并在再次启用它之前将数据加载到该分区中?在那种情况下,我的桌子的其余部分不会遭受完整的索引重建,而且我的加载速度可能更快?

+2

嗯,我只是发现了一个可能的重复:http://stackoverflow.com/问题/ 1367972/drop-index-at-partition-level – thomaspaulb 2010-05-05 11:32:27

回答

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; 
+0

是的,我会删除以前的分区,包括它的索引并添加新的分区,然后它会自动包含在索引中。谢谢回答 :) – thomaspaulb 2010-12-08 21:06:27