Разликата между клъстериран и неклъстъриран индекс е, че клъстерираният индекс определя физическия ред на редовете в базата данни . С други думи, прилагане на групирания индекс към PersonId
означава, че редовете ще бъдат физически сортирани по PersonId
в таблицата, позволявайки търсене на индекс върху това да отиде направо до реда (вместо негрупиран индекс, който би ви насочи към местоположението на реда, добавяйки допълнителна стъпка).
Въпреки това е необичайно за първичния ключ да не бъде клъстерният индекс, но не и нечувано. Проблемът с вашия сценарий всъщност е точно обратното на това, което предполагате:искате уникален стойности в клъстериран индекс, а не дубликати. Тъй като клъстерираният индекс определя физическия ред на реда, ако индексът е върху неуникална колона, тогава сървърът трябва да добави фонова стойност към редове, които имат дублирана стойност на ключ (във вашия случай всички редове с една и съща PersonId
), така че комбинираната стойност (ключ + фонова стойност) да е уникална.
Единственото нещо, което бих предложил е не с помощта на сурогатен ключ (вашият CourtOrderId
) като първичен ключ, но вместо това използвайте съставен първичен ключ на PersonId
и някаква друга уникално идентифицираща колона или набор от колони. Ако обаче това не е възможно (или не е практично), тогава поставете клъстерирания индекс на CourtOrderId
.