web-dev-qa-db-fra.com

Quelle est l'anatomie d'un indice de colonne?

L'une des nouvelles fonctionnalités de SQL Server 2012 Codenamed Denali est l'indice Indice de colonne.

Je connais un bon bit sur de vieux indices de magasin de rangées régulières, comme la structure B-Tree, des différences de stockage entre les pages de niveau des feuilles et des pages B-Tree, affectant les champs inclus, optimiser pour les utiliser, l'ordre des clés, etc.

J'ai des difficultés à obtenir de bonnes informations sur les internes d'un indice de colonne.

  • Comment est-ce structuré?
  • Y a-t-il un b-arbre? Une autre structure en place?
  • Comment les données sont-elles organisées?
  • Quelles types d'opérateurs spécifiques conviennent mieux à l'utiliser?
  • Tous les autres modèles à éviter lors de leur utilisation?

Beaucoup de ce que je peux trouver à leur sujet, c'est fondamentalement le contraire exact d'un indice "normal", c'est-à-dire aucun ordre des clés, aucun champ inclus, non clusterisé uniquement.

Toutes les idées sont appréciées.

20
JNK

Structure de colonne

Les données de colonne sont physiquement stockées dans un ou plusieurssegments (unités d'allocation de lob régulière) 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ées ou de références de valeur (plusieurs techniques de compression sont disponibles). Une référence de valeur Liens vers une entrée dans l'un des dictionnaires jusqu'à deux Dictionnaires de hachage .

Les dictionnaires sont épinglé en mémoire lors de l'exécution de la requête, les identifiants de la valeur de données du segment étant regardés dans le dictionnaire chaque fois que l'exécution nécessite la valeur de données réelle (cette recherche est différée aussi longtemps que possible pour des raisons de performance. ).

Les segments ont également un enregistrement d'en-tête contenant des métadonnées telles que les valeurs minimales et maximales stockées dans le segment. Les informations de l'en-tête peuvent souvent être utilisées pour Éliminer Partitions complètes du traitement à l'heure d'exécution. Les informations d'enregistrement d'en-tête sont stockées dans la structure racine de données LOB habituelle, afin d'éliminer un segment signifie que le moteur de stockage peut ignorer la lecture des pages de données LOB du stockage physique entièrement. Maximiser le potentiel d'élimination peut nécessiter Conception soignée , y compris a Dépendance sur l'ordre d'index en cluster à l'heure où l'index de colonne est construit.

opérateurs de plan spécifiques

SQL Server 2012 introduit un nouveau mode d'exécution appelé Mode batch. Dans ce mode, des paquets d'environ 1000 rangées sont passés entre les opérateurs, améliorant considérablement l'efficacité de l'utilisation du processeur. Dans chaque paquet, les données Columnar sont représentées comme un vecteur. Tous les opérateurs de planent ne prennent pas en charge le mode de mise en œuvre par lots, mais des exemples de ceux qui incluent la numérisation d'indice de colonne de colonne, une jointure intérieure de hachage, la construction de table de hachage, le filtre bitmap, l'agrégat de hachage (non scalaire Agrégats), Filtrer et calcule scalaire (pour évaluation de la projection et de l'expression). Les plans d'exécution de la requête ont été améliorés pour montrer le mode d'exécution estimé et réel.

anti-motifs

Il existe un grand nombre de restrictions dans la première version, y compris des contraintes sur admissibles types de données . Les types les plus courants sont pris en charge; Les types de données non pris en charge incluent DECIMAL avec une précision supérieure à 18 chiffres, (N)VARCHAR(MAX), UNIQUEIDENTIFIER, types CLR et (VAR)BINARY.

Utilisation de Types de chaîne , OUTER JOIN , IN, EXISTS , NOT IN , OR , UNION ALL Peut entraîner une performance significativement réduite (exécution du mode ligne), à ​​moins que des travaux de contournement ne soient utilisés qui impliquent généralement des réécrites de syntaxes inhabituelles comme indiqué dans les articles liés de cette section.

Plus d'informations

Remus Rusanu a blogué une excellente aperçu ici .

22
Paul White 9