Existe alguma diferença tangível entre um índice em cluster exclusivo e uma chave primária em cluster?

17

Entendo que pode haver uma diferença de significado ou intenção entre os dois, mas existem diferenças de comportamento ou desempenho entre uma chave primária em cluster e um índice exclusivo em cluster?

goric
fonte

Respostas:

15

Uma diferença principal é que o índice exclusivo pode ter um valor NULL que não é permitido na chave primária. Em cluster ou não, essa é a principal diferença entre a implementação prática de uma Chave Primária e uma Chave Única.

Ah, e o fato de uma mesa ter um PK e muitos UK :-).

Ambas são diferenças em INTENT e não em DESEMPENHO. Caso contrário, não acho que haja diferença. Por trás de qualquer PK ou Reino Unido, o SQL Server cria um índice (dependendo da solicitação, agrupada ou não) e a maneira como é usada é transparente para a origem.

Marian
fonte
Portanto, não há razão para usar uma PK, exceto (A) como um alias para NOT NULL UNIQUE CLUSTEREDou (B) para destacar que um UQ específico é "especial" no sentido de metadados, mesmo que o RDMS seja agnóstico?
Jon of All Trades
Sim, algo assim, eu mesmo optaria pela opção B :-).
Marian
Há uma razão - para você parar de usar o valor especial NULL onde é inapropriado!
JamesRyan
@JamesRyan: Isso é coberto pelo motivo de Jon da All Trades #A.
Andriy M
1
@ JamesRyan: Sim, entre PRIMARY KEYe NOT NULL UNIQUE, o primeiro seria muito mais difícil de se transformar NULL UNIQUE(principalmente se a restrição já tiver sido referenciada por uma chave estrangeira). Certamente impediria alterações acidentais de NOT NULLpara NULL.
Andriy M
8

Entre uma chave primária em cluster e um índice em cluster exclusivo, não há outro diferente, pois o índice em cluster exclusivo pode ter um valor NULL.

Um índice em cluster não exclusivo possui um identificador exclusivo que deve ser tratado para valores não exclusivos.

mrdenny
fonte
Você quer dizer que outros índices nessa tabela apontam diretamente para as linhas no índice clusterizado que ignoram o índice criado pela chave primária?
22711 bernd_k
1
Está correto. Os índices não agrupados apontam para a chave de cluster, não para a chave primária. Se a chave primária é uma chave sem cluster, tudo o que faz é impor exclusividade em uma coluna que não suporta valores NULL, para que possa ser usada por meio de uma chave estrangeira.
mrdenny