web-dev-qa-db-fra.com

Cela a-t-il logique d'ajouter des index à une table d'index en colonne en cluster?

La question est similaire à celle-ci , mais la réponse ne semble pas répondre à cette question.

Ma compréhension d'une table de colonne regroupée (et veuillez me corriger si je me trompe) est que chaque colonne est stockée de manière physiquement ordonnée, impliquant que chaque colonne a déjà ce qui constitue un indice en regroupement. Si c'était le cas, cela n'aurait pas de sens d'ajouter plus d'index sur la table ... ou le ferait-il? Peut-être un indice composite?

Est-ce que ma pensée est correcte à ce sujet?

7
Jeremy Holovacs

Cela peut avoir du sens à le faire, oui. Parfois, une obligation d'entreprise devra être appliquée via une clé primaire ou une contrainte unique. Ces deux résultent dans un indice sous-jacent sur une table avec un indice de colonne en cluster.

Un index en colonne en cluster n'est pas une bonne structure de données pour certains types de requêtes. Des exemples lorsque des performances extrêmement mauvaises sont possibles incluent agrégation de chaîne sur SQL Server 2016 , requêtes récursives et jointures sans condition d'égalité. Plus généralement, toute requête nécessitant une recherche rapide d'une petite quantité de données d'une table peut ne pas voir les meilleures performances d'un seul indice de colonne en cluster. Il est vrai que élimination de groupe de rangs Peut parfois conduire à des performances similaires par rapport à un indice non clusterisé, mais qui nécessite de charger les données dans un certain ordre et que tous les types de données ne sont pas pris en charge.

Il existe des inconvénients pour créer des index non clusters sur des tables avec un indice de colonne en cluster. L'insertion parallèle n'est plus disponible, les index prennent des espaces de stockage supplémentaires et SQL Server aura moins d'options d'ordre de compression dans certains scénarios.

Dans mon expérience, j'ai constaté qu'il est préférable de définir une barre supérieure que d'habitude lorsque vous envisagez d'ajouter un index non clusterié à une table avec un indice de colonne en cluster. Si vous en avez vraiment besoin, essayez de l'ajouter mais gardez à l'esprit les inconvénients.

1
Joe Obbish