A tabela mais importante do meu banco de dados tem cerca de 300.000 registros e está crescendo. Mais de 20 mesas possuem um FK. Sua chave primária é um número, mas por razões históricas é definido como nvarchar(6) que obviamente é ineficiente (e feio). Às vezes, os registros são excluídos do registro; portanto, a chave primária está se aproximando de 999.999 e devo alterá-la. Um campo de identidade seria a escolha óbvia. Uma chave int, ou similar, com o incremento produzido por um gatilho ou pelo software, seria uma alternativa. Isso seria viável porque os registros são sempre inseridos um por vez. Uma chave int forneceria melhores desempenhos com consultas complexas?
relate perguntas
-
SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado
-
Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?
-
Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?
-
Quais são as principais causas de deadlocks e podem ser evitadas?
-
Como determinar se um Índice é necessário ou necessário
IDENTITY
não é um tipo de coluna por si só, é uma propriedade que pode ser aplicada a qualquer tipo de coluna inteira. Geralmente é aplicado a umINT
e nesse caso não há diferença (a coluna é umaINT
coluna, com aIDENTITY
propriedade definida) embora possa ser aplicado a qualquer tipo que seja internamente um inteiro (BIGINT
,DECIMAL
,MONEY
, ...).Embora seu tipo de string seja feio e um número inteiro seja consideravelmente mais eficiente, mudar para um tipo numérico exigirá algum esforço de teste para garantir que nenhum código de seu aplicativo tenha esquisitices que o tornem sensível aos tipos de dados dessas chaves. Eu recomendo fortemente que você não apenas faça a mudança e espere pelo melhor! Mesmo apenas estender as chaves para
NVARCHAR(10)
ou algo assim pode ser problemático se algum código assumir que as chaves nunca terão mais de seis caracteres ... Se você não mudar para um tipo numérico, pelo menos considere mudar paraCHAR()
- um formato de string não variável também será mais eficiente e, se você estiver armazenando apenas números, não precisará do armazenamento de dois bytes por caractere de um tipo unicode comoN[VAR]CHAR
.