Vou adicionar um índice clusterizado a uma tabela bastante grande:
- mais de 7 milhões de registros
- 106 colunas
- sem PK
- nenhum outro índice.
Há uma Id
coluna que poderia ser usada para a chave de índice, mas é nvarchar(18)
e not unique
(embora não haja valores duplicados lá).
No entanto, estou relutante em usá-lo por causa de seu tipo de dados (impacto no desempenho) e tenho pensado em adicionar uma int identity(1,1)
coluna e usá-la como a chave de índice clusterizado.
Qual solução você prefere recomendar? TIA
Em geral, um ID substituto (um número de incremento que não tem nenhum outro significado) é a melhor escolha, a menos que você tenha um motivo específico pelo qual não funcione.
Um dos maiores problemas com o uso de um valor não incremental para uma chave primária é que você terá divisões de página em algumas inserções, o que fará com que elas sejam mais lentas. Quanto mais lento depende de muitos fatores, então é apenas algo que você teria que medir no sistema.
Google "benefícios da chave primária substituta" e você encontrará uma tonelada de informações. É realmente um livro pequeno para cobrir o tópico, então a resposta completa não é realmente apropriada para este site. Esta pergunta também tem algumas respostas que fornecem boas informações sobre esse tópico.
Sim, este é um caminho a percorrer
Por que - leia abaixo:
Requisitos para um bom índice clusterizado:
1) Sempre Aumentando
Isso ajudará a reduzir a fragmentação do índice no futuro
2) Exclusivo
Se as linhas de chave de índice clusterizado não forem exclusivas, um unificador INT oculto adicional (4 bytes) será adicionado pelo SQL Server automaticamente para tornar as chaves de índice clusterizadas exclusivas e isso aumentará os requisitos de armazenamento tanto para índices clusterizados quanto para índices não clusterizados (eles também são afetados pela largura do índice clusterizado, pois incluem uma cópia oculta da chave do índice clusterizado)
3) Limite
Escolha o menor tipo de dados possível, porque novamente aumenta os requisitos de armazenamento e RAM e reduz o desempenho
É por isso
Id nvarchar(18)
que você tem, é um candidato ruim para uma chave de índice clusterizado, então vá em frente e adicione a coluna INT identity(1,1)