La question n'est pas de savoir quand le PK doit être un NC, mais plutôt de demander quelle est la clé appropriée pour l'index clusterisé.
Et la réponse dépend vraiment de la manière dont vous interrogez les données . L'index clusterisé a un avantage sur tous les autres index: puisqu'il inclut toujours toutes les colonnes, il couvre toujours. Par conséquent, les requêtes pouvant exploiter l'index clusterisé n'ont certainement pas besoin d'utiliser des recherches pour satisfaire certaines des colonnes et / ou prédicats projetés.
Une autre pièce du puzzle consiste à savoir comment utiliser un index . Il existe trois modèles typiques:
- sondes, lorsqu'une seule valeur de clé est recherchée dans l'index
- analyses de plage, lorsqu'une plage de valeurs de clé est récupérée
- ordre par exigence, quand un index peut satisfaire un ordre sans nécessiter un tri aller-retour
Par conséquent, si vous analysez votre charge attendue (les requêtes) et découvrez qu'un grand nombre de requêtes utiliseraient un index particulier parce qu'elles utilisent un certain modèle d'accès bénéficiant d'un index, il est logique de proposer cet index en tant qu'index clusterisé.
Un autre facteur réside dans le fait que la clé d'index cluster est la clé de recherche utilisée par tous les index non cluster. Par conséquent, une clé d'index cluster étendue crée un effet d'entraînement et élargit tous les index non clusterisés. , plus de mémoire, moins de bonté.
Un bon index clusterisé est stable , il ne change pas pendant la durée de vie de l'entité, car une modification des valeurs de la clé d'index cluster signifie que la ligne doit être supprimée et réinsérée.
Et un bon index clusterisé grandit dans un ordre non aléatoire (chaque valeur de clé nouvellement insérée est plus grande que la valeur précédente) afin d'éviter les fractionnements de page et la fragmentation (sans déconner avec FILLFACTOR
s).
Alors, maintenant que nous savons ce qu'est une bonne clé d'index cluster, la clé primaire (qui est une propriété logique de modélisation de données) correspond-elle aux exigences? Si oui, alors la PK devrait être groupée. Si non, alors la PK ne devrait pas être en cluster.
Pour donner un exemple, considérons un tableau de données de vente. Chaque entrée a un identifiant qui est la clé primaire. Mais la grande majorité des requêtes demandent des données entre une date et une autre date. Par conséquent, la meilleure clé d'indexation en cluster serait la date de vente et non l' ID . Un autre exemple d’index clusterisé différent de la clé primaire est une clé de sélectivité très faible, telle qu’une «catégorie» ou un «état», une clé avec très peu de valeurs distinctes. Avoir une clé d'index cluster avec cette clé de sélectivité faible comme clé la plus à gauche, par exemple (state, id)
, a souvent du sens en raison des balayages de plages qui recherchent toutes les entrées dans un «état» particulier.
Une dernière remarque sur la possibilité d’une clé primaire non clusterisée sur un segment de mémoire (c’est-à-dire qu’il n’existe aucun index clusterisé). Il peut s'agir d'un scénario valide. La raison typique est que les performances des insertions en bloc sont essentielles, car les tas ont un débit de insertion en bloc nettement supérieur à celui des index clusterisés.