Question

L'une des nouvelles fonctionnalités de SQL Server 2012 Denali nom de code est index columnstore.

Je sais bien peu de vieux réguliers index ligne magasin, comme la structure B-tree, les différences de stockage entre le niveau des feuilles et pages b-tree, affecte des champs inclus, l'optimisation de les utiliser, pour des clés, etc.

Je vais avoir du mal à obtenir une bonne information sur le internals d'un indice columnstore.

  • Comment est-il structuré?
  • Y at-il un b-arbre? Une autre structure en place?
  • Comment les données organisées?
  • Quels types d'opérateurs spécifiques sont mieux adaptés à l'utiliser?
  • Les autres anti-modèles à éviter lors de leur utilisation?

Beaucoup de ce que je peux savoir à leur sujet sont essentiellement le contraire d'un indice « normal », à savoir pas d'ordre de clés, champs non inclus, NONCLUSTERED SEULEMENT.

Les idées sont appréciés.

Était-ce utile?

La solution

Structure columnstore

columnstore données sont stockées physiquement dans une ou plusieurs segments (unités d'allocation régulière LOB) par colonne, et peut également être partitionné de la manière habituelle. Chaque segment contient environ un million de rangées de valeurs hautement compressés ou des références de valeurs (plusieurs techniques de compression sont disponibles). A des liens de référence de la valeur à une entrée dans l'un des deux à .

Les dictionnaires sont Épinglé en mémoire au cours de requête d'exécution, avec les identifiants de valeurs de données à partir du segment étant regardé dans le dictionnaire chaque fois que l'exécution nécessite la valeur réelle des données (cette recherche est reporté aussi longtemps que possible pour des raisons de rendement).

segments ont également un enregistrement d'en-tête contenant des métadonnées telles que les valeurs minimale et maximale mémorisées dans le segment. Informations l'en-tête peut souvent être utilisé pour éliminer partitions complètes de traitement au moment de l'exécution. En-tête des informations d'enregistrement sont stockées dans la structure de la racine de données LOB habituelle, éliminant ainsi un moyen de segmenter le moteur de stockage peut sauter la lecture des pages de données LOB entièrement stockage physique. Mieux exploiter le potentiel d'élimination peut exiger conception soignée , y compris un scalaire agrégats), filtre et Compute Scalar (pour la projection et l'évaluation de l'expression). Rechercher les plans d'exécution ont été améliorés pour montrer le mode d'exécution estimée et réelle.

Anti-Patterns

Il existe un grand nombre de restrictions dans la première version, y compris les contraintes sur les permis types de données . La plupart des types communs sont pris en charge; les types de données non pris en charge comprennent DECIMAL avec une plus grande précision de 18 chiffres, (N)VARCHAR(MAX), UNIQUEIDENTIFIER, types CLR et (VAR)BINARY.

Utilisation de types , OUTER JOIN , IN, EXISTS , NOT IN , OR , UNION ALL peut entraîner des performances significativement réduite (exécution en mode ligne), à ??moins que des solutions de contournement sont employés qui impliquent généralement réécritures inhabituelles de syntaxe comme indiqué dans les articles liés à cette section .

Plus d'informations

Remus Rusanu a blogué un aperçu .

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top