SQL Server 2008: отключить индекс для одного конкретного раздела таблицы - PullRequest
2 голосов
/ 05 мая 2010

Я работаю с большой таблицей (~ 100.000.000 строк) в SQL Server 2008. Часто мне нужно добавлять и удалять пакеты по ~ 30.000.000 строк в эту таблицу и из нее. В настоящее время перед загрузкой большого пакета в таблицу я отключаю индексы, вставляю данные и перестраиваю индекс. Я измерил это как самый быстрый подход.

С недавних пор я рассматриваю возможность разделения таблиц на эту таблицу для увеличения скорости. Я разделю таблицу согласно моим партиям.

Мой вопрос, можно ли будет отключить индекс одного конкретного раздела и загрузить в него данные, прежде чем снова включить его? В этом случае остальная часть моей таблицы не будет подвергаться полной перестройке индекса, и моя загрузка может быть еще быстрее?

1 Ответ

3 голосов
/ 09 декабря 2010

Индексы обычно находятся в схеме разделов. Для сценария, о котором вы говорите, вы можете загрузить новую таблицу с пакетом (идентичная структура, другое имя), а затем использовать команду 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;
...