2012-09-23 25 views
6

Tengo una tabla user_info en cinco ubicaciones diferentes. Ahora necesito integrar todas las filas en una tabla central user_info. Para hacer esto, necesito una identificación única para cada fila en las tablas fuente. Porque cuando todas las filas entran en la tabla central, cada usuario debe tener una ID única.Cómo SQL Server crea uniqueidentifier usando NEWID()

Ahora mis preguntas son:

  1. si uso uniqueidentifierNEWID() para cada tabla de origen y luego se va a ser globalmente único para & tiempo de vida o tener alguna posibilidad de ser duplicado?

  2. ¿Cómo crea SQL Server el NEWID()? Necesito saber la estructura de generación de claves.

Respuesta

7

Sí, no hay ninguna posibilidad de que haya un duplicado entre las máquinas.

NEWID() se basa en una combinación de un pseudoaleatorio número (del reloj) y la dirección MAC de la NIC principal.

Sin embargo, insertar números aleatorios como este como la tecla agrupada en una tabla es terrible para el rendimiento. Debe considerar ya sea NEWSEQUENTIALID() o una función de tipo COMB para generar GUID que aún ofrezcan los beneficios de prevención de colisiones de NEWID() mientras se mantiene el rendimiento aceptable de INSERT.

+1

¿Alguna documentación acerca de qué API de Windows llama SQL Server usa para 'NEWID'? Sé que 'NEWSEQUENTIALID' usa la dirección MAC, ya que es [claramente visible en el GUID] (http://stackoverflow.com/a/3398847/73226) pero no pudo ver ninguna documentación para NEWID. –

+0

'CoCreateGuid' es más probable? Eric Lippert tenía una [serie de publicaciones de blog] [1] sobre los GUID en general. Ver también: http://stackoverflow.com/questions/39771/is-a-guid-unique-100-of-the-time Para 'NEWID()' el primer dígito hexadecimal de la tercera sección es siempre 4 (cuando pruébelo), para 'NEWSEQUENTIALID()' utiliza la dirección MAC mencionada anteriormente. No recuerdo qué sucede cuando no hay una dirección MAC en la computadora. ¿Alguien sabe lo que sucede en SQL en este caso? [1]: http://blogs.msdn.com/b/ericlippert/archive/2012/05/07/guid-guide-part-three.aspx – Seph

+0

¿Qué tan preciso es el uso de newid()? Parece que si busco dos identificadores al mismo tiempo, debería obtener un duplicado, pero nunca lo he visto. – jumxozizi

Cuestiones relacionadas