Published on

June 30, 2006

Explorando Uniqueidentifiers en SQL Server

Uniqueidentifiers, también conocidos como Identificadores Únicos Globales (GUID), son una herramienta valiosa en SQL Server. En este artículo, profundizaremos en el trasfondo de los uniqueidentifiers, discutiremos su uso en SQL Server 2000 y 2005, y exploraremos por qué son de especial interés para los desarrolladores que trabajan con acceso a datos.

Comprendiendo los Uniqueidentifiers

Un uniqueidentifier es un número de dieciséis bytes generado utilizando una combinación de diferentes elementos de datos, como la hora del sistema y una porción de la dirección MAC de la tarjeta de red. Esta combinación asegura que el uniqueidentifier generado sea único. Si bien los uniqueidentifiers son más difíciles de leer en comparación con las columnas de identidad (número automático), ofrecen ciertas ventajas en escenarios específicos.

Uso en SQL Server 2000 y 2005

En SQL Server 2000 y 2005, generar un uniqueidentifier es sencillo. Puedes utilizar la función NewID() para generar un nuevo uniqueidentifier. Por ejemplo, la siguiente consulta devuelve un nuevo id:

SELECT NEWID()

Además, puedes establecer un uniqueidentifier como valor predeterminado para una columna, asegurando que cualquier fila insertada tenga una clave generada automáticamente.

Es importante tener en cuenta que si bien los uniqueidentifiers están garantizados para ser únicos, no están garantizados para ser secuenciales. Esto puede llevar a divisiones de página al insertar nuevos uniqueidentifiers como claves primarias en una tabla. Las divisiones de página ocurren cuando no hay suficiente espacio en una página para la nueva fila, lo que resulta en la división de la página en dos páginas. Si bien las divisiones de página generalmente no son perjudiciales para el rendimiento, las divisiones de página frecuentes pueden afectar el rendimiento debido a bloqueos y E/S de disco adicionales. Sin embargo, con unidades rápidas, esta preocupación puede mitigarse.

En SQL Server 2000, existía una opción para generar uniqueidentifiers secuenciales, pero requería el uso de un procedimiento almacenado extendido. En SQL Server 2005, se introdujo una nueva función llamada NewSequentialID(). Esta función garantiza la generación de un uniqueidentifier más alto que el generado previamente en la misma máquina, neutralizando efectivamente la preocupación por las divisiones de página. Sin embargo, vale la pena señalar que debido a la forma en que se calculan, alguien podría adivinar la siguiente clave si los uniqueidentifiers están expuestos, como en un parámetro de URL.

Consideraciones de rendimiento

Los uniqueidentifiers tienen ciertas implicaciones de rendimiento. Cada índice no agrupado contiene la clave agrupada, lo que significa que usar un uniqueidentifier como clave agrupada resulta en dieciséis bytes adicionales por fila en comparación con el uso de un entero. Esto conduce a un mayor uso de espacio en disco y menos filas que caben en cada página de índice, lo que resulta en más lecturas de página para utilizar un índice.

Beneficios para los desarrolladores

Los desarrolladores a menudo se benefician de la capacidad de generar una nueva clave sin hacer un viaje de ida y vuelta al servidor. Por ejemplo, al permitir a los usuarios construir un conjunto de detalles de pedido en el cliente y enviarlos todos a la vez, el uso de un uniqueidentifier permite generar las claves en el lado del cliente. Esto se puede lograr llamando a la API Windows CoCreateGuid en VB6 o al método System.Guid.NewGuid en el framework .NET.

Si bien el rendimiento es una consideración importante al usar uniqueidentifiers, no es el único factor a considerar. Los administradores de bases de datos que utilizan ampliamente la replicación y los desarrolladores que buscan minimizar los viajes de ida y vuelta pueden beneficiarse más del uso de uniqueidentifiers. Si las preocupaciones sobre las divisiones de página te han disuadido de usar uniqueidentifiers en el pasado, puede valer la pena reconsiderar esa decisión.

En conclusión, los uniqueidentifiers ofrecen una solución valiosa para generar claves únicas en SQL Server. Al comprender su uso y considerar los requisitos específicos de tu entorno, puedes tomar una decisión informada sobre si incorporar uniqueidentifiers en el diseño de tu base de datos.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.