Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server:NEWID() sempre fornece um ID exclusivo?


Ambos NEWID() e NEWSEQUENTIALID() forneça valores globalmente exclusivos do tipo uniqueidentifier .

NEWID() envolve atividade aleatória, portanto, o próximo valor é imprevisível e sua execução é mais lenta.

NEWSEQUENTIALID() não envolve atividade aleatória, portanto, o próximo valor gerado pode ser previsto (não é fácil!) e executa mais rápido que NEWID() .

Portanto, se você não estiver preocupado com a previsão do próximo valor (por motivos de segurança), poderá usar NEWSEQUENTIALID() . Se você está preocupado com a previsibilidade ou não se importa com a pequena penalidade de desempenho, você pode usar NEWID() .

No entanto, em sentido estrito, ainda há chances insignificantes de que GUIDs gerados por máquinas diferentes tenham o mesmo valor. Na prática, é considerado impossível.

Se você quiser mais informações, leia isto:Qual ​​método para gerar GUIDs é melhor para garantir que o GUID seja realmente único?

Observe NEWID() está em conformidade com RFC 4122 . E a outra função usa um algoritmo da Microsoft para gerar o valor.