Temos uma grande mesa [MyTable]que atualmente tem tanto um Primary Key, e um Unique Non Clustered Indexna mesma coluna ( [KeyColumn]). O índice U NC também possui colunas de cobertura adicionais.
Ter o PK e o índice NC exclusivo nas mesmas colunas parece redundante, então eu estava pensando em excluir a chave primária e, em vez disso, usar o índice exclusivo não clusterizado para fins de integridade referencial.
Observe que a tabela está totalmente agrupada por outra coluna.
Ou seja, temos:
ALTER TABLE [MyTable]
ADD CONSTRAINT [PK_MyTable]
PRIMARY KEY NONCLUSTERED ([KeyColumn])
GO
E
CREATE UNIQUE NONCLUSTERED INDEX [IX_MyTable_SomeIndex]
ON [MyTable] ([KeyColumn])
INCLUDE ([Column1], [Column2])
GO
Tanto quanto eu sei, não é possível adicionar colunas de cobertura a uma Chave Primária, então pretendo fazer:
- Elimine as restrições de chave estrangeira dependentes
MyTable.KeyColumn - Solte a Chave Primária
MyTable.KeyColumninteiramente - Adicione novamente as chaves estrangeiras à tabela (ou seja, o RI será aplicado via
MyTable.KeyColumn)
A única implicação que posso pensar em fazer isso é que não obteremos o símbolo da chave visual em nossos diagramas de ERD e que a densidade do índice (folha) será menor por causa das colunas incluídas.
Eu li /programming/487314/primary-key-or-unique-index e estou feliz com os aspectos de integridade e desempenho de fazer isso.
Minha pergunta é: essa abordagem é falha?
Editar O que estou tentando realizar : Otimização de desempenho e Limpeza de primavera . Ao remover o PK ou um Índice, haverá menos páginas necessárias para meus índices = gravações mais rápidas, além de benefícios operacionais / de manutenção, ou seja, um índice a menos para manter a desfragmentação etc.
Para colocar um pano de fundo nisso, eu nunca tive uma tabela que está sendo referenciada, sem um PK. No entanto, o fato de um índice NC com colunas de cobertura ter sido adicionado à tabela significa que eu preciso adaptar meu pensamento.