Différence entre la recherche d'index cluster et la recherche d'index non cluster

10

Quelle est la différence entre la recherche d'indices groupés (CI) et la recherche d'indices non groupés (NCI)? Est-ce que l'un fonctionne mieux que l'autre?

La raison pour laquelle je pose cette question est que j'ai une table avec 50 millions de lignes et 150 colonnes. Il a une colonne nommée IDdéfinie comme l'index clusterisé. Il y a un autre NCI dessus avec le même ID de clé d'index et sept includecolonnes -d. Il me semble que l'index NC est un doublon ici et peut être supprimé en toute sécurité.

Je veux donc des avis / conseils d'experts si elle peut être déposée en toute sécurité ou si elle doit rester intacte?

SQLPRODDBA
la source
Voulez-vous dire que TOUTES les colonnes sont incluses dans l'index non cluster?
Ian Ringrose
Non. La table contient 150 colonnes avec la colonne ID définie comme CI et elle a un index NCI avec à nouveau la colonne ID comme clé d'index et 7 autres colonnes dans include.
SQLPRODDBA
Ensuite, Paul White semble avoir donné la bonne réponse, mais je me demande si vous devez changer la table "de base" d'une table en cluster en un tas. Ou même fractionner la table en fonction de la fréquence de mise à jour des différentes colonnes, afin de réduire le coût de la journalisation des transactions.
Ian Ringrose

Réponses:

26

Un index non cluster qui possède les mêmes clés * que l'index cluster, peut toujours être utile, car l'index non cluster sera généralement plus petit et plus dense. N'oubliez pas qu'un index clusterisé inclut toutes les données en ligne, il s'agit donc normalement de l'index le plus large (le moins dense) possible.

* Les mêmes colonnes clés, dans la même séquence, triées de la même manière (asc / desc).

Pour une recherche de singleton (une recherche utilisant un prédicat d'égalité dans un index unique), la principale différence est la plus grande chance présumée des pages d'index nécessaires pour trouver cet enregistrement unique déjà en mémoire. Toutes choses égales par ailleurs, un index non cluster avec 100 pages a plus de chances qu'un index cluster stocké sur 10 000 pages.

Pour tout autre type de recherche, sauf un singleton, il y aura également un composant de numérisation. La partie numérisation bénéficiera également de la plus grande densité de l'index non cluster (plus de lignes par page). Même si les pages doivent provenir d'un stockage persistant, la lecture de moins de pages est plus rapide.

Vous devez vérifier la documentation du système, demander à la personne qui a ajouté l'index et / ou rechercher des commentaires de code pour comprendre pourquoi cet index existe. Vous devez également vérifier attentivement les définitions d'index complètes , y compris la compression, et consulter les scripts de maintenance d'index. Il pourrait y avoir d'autres raisons spéciales pour avoir l'index non clusterisé (par exemple la possibilité de reconstruire en ligne).

Paul White 9
la source