Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Clusterisé vs non clusterisé

La distinction entre un index clusterisé et un index non clusterisé est que l'index clusterisé détermine l'ordre physique des lignes dans la base de données . En d'autres termes, appliquer l'index clusterisé à PersonId signifie que les lignes seront physiquement triées par PersonId dans la table, permettant à une recherche d'index sur celle-ci d'aller directement à la ligne (plutôt qu'un index non clusterisé, qui vous dirigerait vers l'emplacement de la ligne, ajoutant une étape supplémentaire).

Cela dit, c'est inhabituel pour que la clé primaire ne soit pas l'index clusterisé, mais pas inconnu. Le problème avec votre scénario est en fait le contraire de ce que vous supposez :vous voulez unique valeurs dans un index clusterisé, pas les doublons. Étant donné que l'index clusterisé détermine l'ordre physique de la ligne, si l'index se trouve sur une colonne non unique, le serveur doit ajouter une valeur d'arrière-plan aux lignes qui ont une valeur de clé en double (dans votre cas, toutes les lignes avec le même PersonId ) afin que la valeur combinée (clé + valeur d'arrière-plan) soit unique.

La seule chose que je suggérerais est pas en utilisant une clé de substitution (votre CourtOrderId ) comme clé primaire, mais utilisez à la place une clé primaire composée de PersonId et une autre colonne ou un ensemble de colonnes d'identification unique. Si ce n'est pas possible (ou pas pratique), placez l'index clusterisé sur CourtOrderId .