代码之家  ›  专栏  ›  技术社区  ›  littlegreen

SQL Server 2008:禁用一个特定表分区上的索引

  •  2
  • littlegreen  · 技术社区  · 14 年前

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

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

    1 回复  |  直到 13 年前
        1
  •  3
  •   nycgags    14 年前

    索引通常位于分区方案上。对于您正在讨论的场景,实际上可以使用批处理(相同的结构,不同的名称)加载一个新表,然后使用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;