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 に答える