Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Agrupado x não agrupado


A distinção entre um índice clusterizado versus não clusterizado é que o índice clusterizado determina a ordem física das linhas no banco de dados . Em outras palavras, aplicando o índice clusterizado a PersonId significa que as linhas serão classificadas fisicamente por PersonId na tabela, permitindo que uma pesquisa de índice vá direto para a linha (em vez de um índice não clusterizado, que direcionaria você para o local da linha, adicionando uma etapa extra).

Dito isso, é incomum para a chave primária não ser o índice clusterizado, mas não inédito. O problema com seu cenário é, na verdade, o oposto do que você está supondo:você quer único valores em um índice clusterizado, não duplicatas. Como o índice clusterizado determina a ordem física da linha, se o índice estiver em uma coluna não exclusiva, o servidor precisará adicionar um valor de plano de fundo às linhas que tenham um valor de chave duplicado (no seu caso, todas as linhas com o mesmo PersonId ) para que o valor combinado (chave + valor de fundo) seja exclusivo.

A única coisa que eu sugiro é não usando uma chave substituta (seu CourtOrderId ) como a chave primária, mas use uma chave primária composta do PersonId e alguma outra coluna ou conjunto de colunas de identificação exclusiva. Se isso não for possível (ou não for prático), coloque o índice clusterizado em CourtOrderId .