Pergunta

Eu tenho um banco de dados SQL com um conjunto de tabelas que possuem Unique ID do. Durante muito tempo tenho vindo a utilizar o tipo de dados identificador único e passando um guid da minha interface C #. No entanto, para o propósito de velocidade ao consultar decidi passar a usar um bigint e passando em um longo.

O que é a maneira mais fácil para criar anseia únicos, cada vez que eu executar o código para que não haja duplicação de ID?

Foi útil?

Solução

A única maneira que você pode garantir que o bigint é único dentro da tabela de banco de dados, é deixar SQL Server gerá-lo para você -. Torná-lo uma coluna de identidade

Você realmente medir o desempenho com uniqueidentifier e achei muito lento?

Outras dicas

Se a velocidade é um problema, você pode obter consulta melhorias se estiver usando um uniqueidentifier gerando-lo usando a função newsequantialID () em vez de NewID (). O novo método gera uniqueidentifiers sequenciais

Onde você vê a desaceleração? Consulta ou Insert / Update? Eu pergunto porque GUID de como as chaves primárias não são grandes para insert / update porque eles não são sequenciais, como a identidade do e pode causar algum surra no índice agrupado de uma chave. Mas SQLServer tem sequencial de guids agora que resolver isso. Ouço muito sobre usando GUID de como chaves ser lento mas eu me pergunto o quanto isso é realmente verdade. Especialmente em máquinas de 64 bits -? É comparar os números de 128 bits realmente que muito mais lento do que comparando 64 ou até 32 números de bits

Existem outras opções para gerar números exclusivos além de uma semente. Uma possibilidade é a de gerar um número com base no tempo, algo como os carrapatos, ou melhor calcular o número de segundos desde o início de 2009. Em seguida, acrescentar um dígito único com base na localização (ou conta se você não está fazendo isso no servidor ) o número foi criado para o final do número (o dígito menos significativo).

Então, se o seu novo número original foi criado em servidor de aplicações 1 e da ID foi de 42 e é tem sido 4000 segundos desde o início de 2009, o seu novo identificador seria 400042. O próximo gerado poderia ser 400942, e um gerado a partir de um servidor diferente, exatamente o mesmo tempo poderia ser 400943.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top