Różnica między indeksem klastrowym a nieklastrowym polega na tym, że indeks klastrowy określa fizyczną kolejność wierszy w bazie danych . Innymi słowy, zastosowanie indeksu klastrowego do PersonId
oznacza, że wiersze będą fizycznie sortowane według PersonId
w tabeli, umożliwiając przeszukiwanie indeksu według tego, aby przejść bezpośrednio do wiersza (zamiast indeksu nieklastrowanego, który skieruje Cię do lokalizacji wiersza, dodając dodatkowy krok).
To powiedziawszy, jest niezwykłe aby klucz podstawowy nie był indeksem klastrowym, ale nie jest niespotykany. Problem z twoim scenariuszem jest w rzeczywistości przeciwieństwem tego, co zakładasz:chcesz unikalny wartości w indeksie klastrowym, a nie duplikaty. Ponieważ indeks klastrowy określa fizyczną kolejność wiersza, jeśli indeks znajduje się w nieunikatowej kolumnie, serwer musi dodać wartość tła do wierszy, które mają zduplikowaną wartość klucza (w twoim przypadku wszystkie wiersze z taką samą wartością PersonId
), aby połączona wartość (klucz + wartość tła) była unikalna.
Jedyne, co sugeruję, to nie za pomocą klucza zastępczego (Twój CourtOrderId
) jako klucz podstawowy, ale zamiast tego użyj złożonego klucza podstawowego PersonId
i jakaś inna unikatowo identyfikująca kolumna lub zestaw kolumn. Jeśli nie jest to możliwe (lub niepraktyczne), umieść indeks klastrowy na CourtOrderId
.