Het onderscheid tussen een geclusterde versus niet-geclusterde index is dat de geclusterde index de fysieke volgorde van de rijen in de database bepaalt . Met andere woorden, de geclusterde index toepassen op PersonId
betekent dat de rijen fysiek worden gesorteerd op PersonId
in de tabel, waardoor een indexzoekopdracht hierop rechtstreeks naar de rij kan gaan (in plaats van een niet-geclusterde index, die u naar de locatie van de rij zou leiden en een extra stap zou toevoegen).
Dat gezegd hebbende, het is ongebruikelijk voor de primaire sleutel om niet de geclusterde index te zijn, maar niet ongehoord. Het probleem met uw scenario is eigenlijk het tegenovergestelde van wat u aanneemt:u wilt uniek waarden in een geclusterde index, geen duplicaten. Omdat de geclusterde index de fysieke volgorde van de rij bepaalt, moet de server, als de index zich op een niet-unieke kolom bevindt, een achtergrondwaarde toevoegen aan rijen die een dubbele sleutelwaarde hebben (in uw geval alle rijen met dezelfde PersonId
) zodat de gecombineerde waarde (sleutel + achtergrondwaarde) uniek is.
Het enige wat ik zou willen voorstellen is niet met behulp van een surrogaatsleutel (uw CourtOrderId
) kolom als de primaire sleutel, maar gebruik in plaats daarvan een samengestelde primaire sleutel van de PersonId
en een andere uniek identificerende kolom of reeks kolommen. Als dat echter niet mogelijk (of niet praktisch) is, plaats dan de geclusterde index op CourtOrderId
.