Dois-je ajouter une compression au niveau de la page avant d'ajouter la clé primaire ou après?

14

Situation

  • Entrepôt de données sur Sql Server 2008 Enterprise
  • Plus de 36 millions de lignes de tas (ne demandez pas), avec plus de 60 colonnes
  • 750k ajoutés mensuellement
  • Aucune clé primaire définie (j'en ai identifié une)
  • Pas de compression

Ce que je pense faire (dans cet ordre)

  • Ajouter une compression au niveau de la page
  • Ajouter le PK
  • Ajouter un certain nombre d'index non clusterisés
  • Faites cela le plus rapidement possible

Question


Ce vers quoi je me penche en ce moment

-- Add page level compression
alter table     dbo.TableName
rebuild with    (data_compression = page)
; 
go

-- Add primary key
alter table             dbo.TableName
add constraint          PK_TableName
primary key clustered   (<Columns>)
;
go

-- Add NC_IXs here
...
...

J'ai regardé ici (documentation de création PK) et ici (documentation ALTER TABLE) , mais je ne vois rien de définitif sur la question de savoir si les index héritent ou non des paramètres de compression de table. La réponse à cette question particulière est "Non, la compression n'est pas héritée", trouvée ici sur dba.stackexchange

Adrian Torrie
la source

Réponses:

12

L'index cluster est en fait la table. En supposant que votre clé primaire est en cluster, je créerais une clé primaire en cluster avec une compression au niveau de la page plutôt que d'essayer de le faire en deux étapes.

-- Add primary key
ALTER TABLE             dbo.TableName
ADD CONSTRAINT          PK_TableName
PRIMARY KEY CLUSTERED   (<Columns>)
WITH (DATA_COMPRESSION = PAGE)
;

Je copierais également environ 100k lignes dans une table temporaire (physique temporaire non #temporaire) et exécuterais des tests. Essayez d'abord d'exécuter la compression, la clé en cluster d'abord, essayez de les faire en une seule étape. Découvrez ce qui fonctionne le plus rapidement. Je suppose que ce sera une étape personnellement :).

Kenneth Fisher
la source
2

Dans tous les cas, la compression de page va mélanger les données autour d'un LOT. J'estimerais que faire la compression en premier se traduirait par moins d'E / S globales puisque l'opération de clustering lira les pages compressées.

Max Vernon
la source