SQL Server - Quand utiliser un index en cluster ou non en cluster?

99

Je connais les principales différences entre les index clusterisés et non groupés et je comprends comment ils fonctionnent réellement. Je comprends comment les index clusterisés et non clusterisés améliorent les performances de lecture. Mais une chose dont je ne suis pas sûr, c'est quelles seraient les raisons pour lesquelles je choisirais l'un plutôt que l'autre.

Par exemple: si une table n'a pas d'index clusterisé, faut-il créer un index non clusterisé et quel est l'avantage de faire

armulateur
la source
3
Merci d'avoir répondu. J'en suis déjà conscient. Ma question est la suivante: y aurait-il une situation où la création d'un index non groupé bénéficierait davantage que la création d'un index groupé
armulator
2
Oui, vous devez éviter un index clusterisé lorsque; la colonne a une faible cardinalité, pas d'ordre particulier, fréquemment mise à jour, non séquentielle, c'est un composite de nombreuses colonnes ...
TI
Merci pour votre réponse. Son utile
armulator
1
Peut-être que cette question vous aiderait: stackoverflow.com/questions/5070529/…
David García González
Double possible de Quelle colonne l'index clusterisé doit-il être placé?
Michael Freidgeim

Réponses:

117

Je veux juste mettre un mot d'avertissement: veuillez choisir très soigneusement votre index cluster! Chaque table de données "régulière" doit avoir un index clusterisé, car avoir un index clusterisé accélère en effet beaucoup d'opérations - oui, accélère , même les insertions et les suppressions! Mais seulement si vous choisissez un bon index clusterisé.

Il s'agit de la structure de données la plus répliquée de votre base de données SQL Server. La clé de clustering fera également partie de chaque index non cluster de votre table.

Vous devez être extrêmement prudent lorsque vous choisissez une clé de clustering - elle doit être:

  • étroit (4 octets idéal)

  • unique (c'est le "pointeur de ligne" après tout. Si vous ne le rendez pas unique, SQL Server le fera pour vous en arrière-plan, ce qui vous coûtera quelques octets pour chaque entrée multiplié par le nombre de lignes et le nombre d'index non clusterisés vous avez - cela peut être très coûteux!)

  • statique (ne jamais changer - si possible)

  • idéalement en constante augmentation pour ne pas vous retrouver avec une horrible fragmentation d'index (un GUID est le contraire d'une bonne clé de clustering - pour cette raison particulière)

  • il devrait être non nullable et idéalement également à largeur fixe - a varchar(250)fait une très mauvaise clé de clustering

Tout le reste devrait vraiment être le deuxième et le troisième niveau d'importance derrière ces points ...

Voir quelques articles de blog de Kimberly Tripp ( La reine de l'indexation ) sur le sujet - tout ce qu'elle a écrit dans son blog est absolument inestimable - lisez-le, digérez-le - en direct!

marc_s
la source
1
Merci marc_s pour l'explication claire. Mais techniquement, qu'est-ce que l' non clusteredindex fait pour nous? quelle est son importance ..?
hud
@nad: un index non groupé bien choisi peut accélérer vos recherches - au lieu d'avoir à comparer potentiellement des millions de lignes de données avec vos critères de recherche, vous pouvez trouver une ligne donnée avec seulement 4, 5 comparaisons. Cela fait une énorme différence!
marc_s
1
@MuriloKunze: lisez le billet de blog de Kim Tripp sur le sujet - elle explique en détail pourquoi c'est le cas
marc_s
5
Je suis désolé, mais où est la réponse à la question "SQL Server - Quand utiliser un index en cluster ou non en cluster?" ?
Eduard