2

Je travaille avec une grande table (~ 100.000.000 lignes) dans SQL Server 2008. Fréquemment, je dois ajouter et supprimer des lots de ~ 30.000.000 lignes vers et de cette table. Actuellement, avant de charger un gros lot dans la table, je désactive les index, j'insère les données, puis je reconstruis l'index. J'ai mesuré cela pour être l'approche la plus rapide.SQL Server 2008: Désactiver l'index sur une partition de table particulière

Depuis peu, je considère l'implémentation du partitionnement de table sur cette table pour augmenter la vitesse. Je vais partitionner la table en fonction de mes lots.

Ma question, sera-t-il possible de désactiver l'index d'une partition particulière, et charger les données dans celui-ci avant de l'activer à nouveau? Dans ce cas, le reste de ma table n'aura pas à subir une reconstruction d'index complète, et mon chargement peut être encore plus rapide?

+2

Hm, je viens de trouver un double possible: http://stackoverflow.com/ questions/1367972/drop-index-at-partition-level – thomaspaulb

Répondre

3

Les index sont généralement sur le schéma de partition. Pour le scénario dont vous parlez, vous pouvez charger une nouvelle table avec le lot (structure identique, nom différent), puis utiliser la commande SWITCH pour ajouter cette table en tant que nouvelle partition dans votre table existante.

J'ai code inclus que j'utiliser pour effectuer cela, vous devrez le modifier en fonction de vos noms de table:

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

Oui, je voudrais supprimer la partition précédente, y compris son index et ajouter la nouvelle partition, qui serait alors automatiquement inclus dans l'index. Merci de répondre :) – thomaspaulb

Questions connexes