Agrupado / índice não agrupado na coluna de identificador exclusivo no SQL Server
-
03-07-2019 - |
Pergunta
Eu li as várias perguntas / respostas aqui que basicamente indicam que ter um índice agrupado em uma coluna uniqueidentifier é uma má escolha por motivos de desempenho. Independentemente disso, eu preciso usar um uniqueidentifier como minha chave primária, e eu não quero usar newsequentialid () porque os valores gerados são muito semelhantes entre si (Eu preciso de mais IDs aleatórios para que os usuários não podem [razoavelmente] 'palpite' outra ID).
Então, qual é a melhor maneira de indexar este PK? Mesmo que um índice agrupado na esta coluna não é o ideal, é melhor do que um índice "única, não agrupado"?
Estou usando o SQL Server 2005.
Solução
Em primeiro lugar, se você está tentando usar NEWID()
para alcançar aleatoriedade (mais do que apenas olhar aleatório), você está em apuros.
É geralmente inferior a escolha ideal porque outros índices irá referenciar a chave índice agrupado e uma chave de índice longo agrupado irá degradar o desempenho de todos os índices. Você poderia criar uma coluna IDENTITY
inteiro e fazer com que o índice de cluster e apenas criar um índice não agrupado exclusivo na coluna uniqueidentifier
.