Skillnaden mellan ett klustrat och ett icke-klustrat index är att det klustrade indexet bestämmer den fysiska ordningen för raderna i databasen . Med andra ord, att tillämpa det klustrade indexet på PersonId
betyder att raderna kommer att sorteras fysiskt efter PersonId
i tabellen, vilket tillåter en indexsökning på detta att gå direkt till raden (istället för ett icke-klustrat index, vilket skulle leda dig till radens plats och lägga till ett extra steg).
Som sagt, det är ovanligt för att primärnyckeln inte ska vara det klustrade indexet, men inte ovanligt. Problemet med ditt scenario är faktiskt motsatsen till vad du antar:du vill ha unikt värden i ett klustrat index, inte dubbletter. Eftersom det klustrade indexet bestämmer den fysiska ordningen för raden, om indexet är på en icke-unik kolumn, måste servern lägga till ett bakgrundsvärde till rader som har ett duplicerat nyckelvärde (i ditt fall, alla rader med samma PersonId
) så att det kombinerade värdet (nyckel + bakgrundsvärde) är unikt.
Det enda jag skulle föreslå är inte med hjälp av en surrogatnyckel (ditt CourtOrderId
) kolumnen som primärnyckel, men använd istället en sammansatt primärnyckel av PersonId
och någon annan unikt identifierande kolumn eller uppsättning kolumner. Om det inte är möjligt (eller inte praktiskt), lägg sedan det klustrade indexet på CourtOrderId
.