En una base de datos donde todos sus claves primarias son Guid, ¿cuáles son las diferencias y las implicaciones y/o los pros y los contras de usar newid() versus newsequentialid() como el «valor predeterminado o de unión».

La única diferencia de que yo sé es que newid() crea un nuevo GUID aleatorio frente a newsequentialid() crea un nuevo GUID basado en el último que está en la mesa en una incrementado la moda.

InformationsquelleAutor 7wp | 2009-10-19

4 Comentarios

  1. 28

    Como yo lo entiendo, cuando se realiza una inserción en una fila de la base de datos, que será insertado en orden con respecto a las otras PK en la tabla. Con un guid, esto podría ser en cualquier lugar en la tabla. Un newsequentialid() siempre será agregada al final de la tabla.

    Por lo que el rendimiento de las inserciones se ha mejorado.

    Este sitio explica las diferencias y puntos de referencia entre los dos métodos diferentes.

    Actualización – el blog de referencia se ha movido. El enlace se refiere ahora a un web.archive.org enlace. Aquí está la clave para llevar:

    newid() vs newsequentialid () ¿cuáles son las diferencias/pros y los contras?

    Lo más sorprendente es el número de escrituras requerido por la función NEWID función del sistema. Esto, junto con el promedio de densidad de página de 69%, es evidencia de la página de la división causada por la distribución aleatoria de las inserciones en el nivel de hoja. Tan pronto como se llena una página necesita ser dividida en 2 páginas de 50% cada uno para que la inserción completa. No sólo tiene la página de la división resultó en una baja densidad de página, se ha fragmentado las páginas de datos bastante mal (hay un 99% de probabilidad de que la siguiente página de datos no está al lado de la actual). En nuestras pruebas, el lugar más propenso para una página libre requerido para la división de página al final de la tabla, independientemente de donde la fila se inserta. Por lo tanto, leer las filas en orden de la exploración de las necesidades para mantener saltar hacia atrás y adelante entre distribuida ampliamente páginas de división, de ahí la terrible fragmentación.

    –Stefan Delmarco

    • Eh? Si se generan sequantially ¿Cómo puede ser guarneteed que el GUID generado es realmente único, en lugar de ser simplemente algo que se parece a un GUID?
    • No hay garantía que un GUID es único, es muy probable que sea.
    • Los enlaces son volátiles… Fotia ahora 404 en el enlace de la respuesta.
    • web.archive.org/web/20110526141832/http://www.fotia.co.uk/fotia/…
  2. 13

    Sobre el uso de secuencia de teclas (como con la identidad, la secuencia, y NEWSEQUENTIALID) vs no secuenciales (de como con función NEWID o una costumbre aleatorio generador de claves), hay varios aspectos a tener en cuenta.

    De partida secuencial de las claves, todas las filas en una final del índice. Cuando una página es completa, SQL Server asigna una página nueva y llena. Esto se traduce en una menor fragmentación en el índice, lo cual es beneficioso para el rendimiento de la lectura. También, la inserción puede ser más rápido cuando una sola sesión es la carga de los datos, y los datos residen en una sola unidad o de un pequeño número de unidades.

    Sin embargo, con la gama alta de los subsistemas de almacenamiento que tiene muchos ejes, la situación puede ser diferente. Cuando la carga de datos a partir de varias sesiones, usted va a terminar con la página del pestillo de la contención (pestillos son objetos que se usan para sincronizar el acceso a las páginas de base de datos) en contra de la derecha de las páginas de el nivel hoja del índice de la lista enlazada. Este cuello de botella que impide el uso de la producción completa del subsistema de almacenamiento.
    Tenga en cuenta que si usted decide utilizar secuencial claves y se está utilizando numérico, puede comenzar siempre con el valor más bajo en el tipo de uso de toda la gama. Por ejemplo, en lugar de comenzar con 1 en un tipo INT, usted podría comenzar con de-2.147.483.648.

    Considerar no secuenciales claves, tales como al azar generadas con NEWID o con una solución personalizada. Cuando tratando de forzar una fila en una ya de página completa, SQL Server realiza un clásico de la división de página—se asigna una nueva página y se mueve a la mitad de las filas de la página original a la nueva. Una división de página tiene un costo, además de que los resultados en el índice de fragmentación. Índice de fragmentación puede tener un impacto negativo en el rendimiento de las lecturas. Sin embargo, en términos de rendimiento de la plaquita, si el subsistema de almacenamiento contiene muchos de los husillos y carga de datos de varios períodos de sesiones, el orden aleatorio en realidad puede ser mejor que la secuencial, a pesar de las divisiones.

    Que es porque no hay ningún punto caliente en el extremo derecho de la índice, y utiliza el subsistema de almacenamiento del
    el rendimiento disponible mejor. Un buen ejemplo de un punto de referencia que demuestra que esta estrategia puede ser encontrado en un blog por Thomas Kejser en http://blog.kejser.org/2011/10/05/boosting-insert-speed-by-generating-scalable-keys/.

    Fuente:
    Consulta Microsoft®
    SQL Server® 2012
    Examen 70-461
    Kit De Capacitación

  3. 1

    A mi entender, cuando la instancia de SQL incendios hasta el NEWSEQUENTIALID GUID es inicializado a un valor aleatorio. Entonces, por la vida de su funcionamiento Guid se incrementa en el centro de la GUID, NO mirando en la última GUID generado para la tabla.

    • El beneficio de hacer esto es en los índices. Completos al azar Guid fragmento de los índices demasiado, secuencial Guid son buenas para la inserción y el rendimiento de la indexación.
    • Microsoft estados que es secuencial con respecto a la última GUID generado desde el host de la máquina se inició la última vez.
  4. -4

    Yo sepa, NEWID() genera la GUID en orden aleatorio y NEWSEQUENTIALID() genera la GUID en orden secuencial. NEWSEQUENTIALID() puede ser utilizado SÓLO en defecto de cláusula de una tabla.

    • No añadir nada a lo ya escrito en la pregunta.

Dejar respuesta

Please enter your comment!
Please enter your name here