Rozdíl mezi seskupeným indexem a indexem bez klastrů je ten, že seskupený index určuje fyzické pořadí řádků v databázi . Jinými slovy, použití seskupeného indexu na PersonId
znamená, že řádky budou fyzicky seřazeny podle PersonId
v tabulce, což umožňuje indexové vyhledávání v tomto přejít přímo na řádek (namísto indexu bez klastrů, který by vás nasměroval na umístění řádku a přidal další krok).
To znamená, že je to neobvyklé pro primární klíč není seskupený index, ale není neslýchaný. Problém s vaším scénářem je ve skutečnosti opakem toho, co předpokládáte:chcete jedinečné hodnoty v seskupeném indexu, nikoli duplikáty. Protože seskupený index určuje fyzické pořadí řádku, pokud je index v nejedinečném sloupci, musí server přidat hodnotu pozadí k řádkům, které mají duplicitní hodnotu klíče (ve vašem případě všechny řádky se stejnou PersonId
), aby kombinovaná hodnota (klíč + hodnota pozadí) byla jedinečná.
Jediná věc, kterou bych navrhl, je ne pomocí náhradního klíče (vaše CourtOrderId
) jako primární klíč, ale místo toho použijte složený primární klíč PersonId
a nějaký další jednoznačně identifikující sloupec nebo sadu sloupců. Pokud to však není možné (nebo to není praktické), umístěte seskupený index na CourtOrderId
.