Actualité‎ > ‎

Zoom sur les Columnstore Indexes

publié le 20 févr. 2012 à 13:28 par Thomas Gauchet
Les columnstore indexes sont une nouveauté importante de la base relationnelle SQL 2012. Ce sont des index en colonnes applicable directement sur les tables de faits ou sur les dimensions lorsque celles ci dépassent les quelques millions de membres.

+ Principal avantage : performance sans commune mesure des requêtes SQL sur les schémas en étoiles
- Principale contrainte les données de la table sont en lecture seule à moins de désactiver l'index.
Image colonneLa fonctionnalité est à réserver à des grosses volumétries. La bonne pratique est d'indexer  toutes, ou quasi toutes, les colonnes d'une table. Enfin pour tirer au maximum profit de l'index, les requêtes doivent être des jointures en étoiles avec des INNER JOIN, des GROUP BY et des aggrégations. 

Dans la première versions SQL 2012 RTM, pas mal de choses sont déconseillées mais Microsoft semble annoncé que la fonctionnalité sera très prochainement améliorée. Il ne faut pas joindre 2 grosses tables de faits. Il faut éviter de joindre et filtrer sur les champs de type chaines de caractères. Le NOT IN, l'OUTER JOIN et le UNION ALL sont également déconseillés pour l'instant.

exemple :
CREATE NONCLUSTERED COLUMNSTORE INDEX [MyIndex] ON [dbo].[FactHealthAndSafety]
(
[DateKey],
[AssetKey],
[WellCount],
[MTO],
[RWTC],
[LTI],
[FTL]
)
GO

Comme la table passe en lecture seule,  l'astuce est de jouer avec les partitions et notamment le SWITCH afin de mettre à jour la table. Il suffit de créer la nouvelle partition (vide), créer une table pour le SWITCH de structure identique sans index, insérer les données de la nouvelle partition dans la table de SWITCH, lui ajouter l'index COLUMNSTORE, puis échanger avec la partition nouvelle vide avec la table de SWITCH...


Comments