Compartir a través de


Microsoft SQL Server: La solución de secuenciación

La nueva plataforma de Microsoft SQL Server estrena una función de secuenciado que debería resultar extremadamente útil para todos los administradores de SQL.

Denny Cherry

Hay una nueva adición bienvenida a Microsoft SQL Server (), presente en la primera versión beta pública de SQL Server "Denali." Muchos miembros de la Comunidad de SQL Server han sido solicitar funciones de secuenciación durante años, y finalmente van a estar disponible.

Las secuencias son conceptualmente similar a la propiedad de identidad, que se puede colocar en una columna de una tabla. La gran diferencia entre la identidad y secuencias es que las secuencias no dependen de una tabla específica. De hecho, no tienes que usar una tabla a todos. Una base de datos puede incluir varias secuencias, sólo limitadas por el número total de objetos dentro de la base de datos.

Crear una secuencia

Cuando se crea una secuencia, no tendrá que especificar cómo o donde la base de datos utilizará esa secuencia. La secuencia es un objeto totalmente independiente de otros objetos dentro de la base de datos. Hay varias opciones que se debe especificar, sin embargo.

La primera es la opción de MINVALUE, que es el valor más bajo que puede emitir la secuencia. La siguiente es la opción MAXVALUE, que es el valor más alto que puede emitir la secuencia. La siguiente opción es la opción Iniciar con, que es el primer valor que va a emitir. Cuando se omite la opción Iniciar con, utilizará MINVALUE para el primer valor. Éstas son las opciones de MINVALUE, MAXVALUE y empezar con en una instrucción CREATE SEQUENCE básica:

CREATE SEQUENCE dbo.MySequence AS INT MINVALUE 1 MAXVALUE 100000 START WITH 1000

Si no desea especificar un MINVALUE o MAXVALUE, puede omitir estas líneas de la instrucción CREATE SEQUENCE o utilizar las palabras clave NO MINVALUE y MAXVALUE NO, como se muestra aquí:

CREATE SEQUENCE dbo.MySequence AS INT NO MINVALUE NO MAXVALUE START WITH 1000

Se trata de la instrucción CREATE SEQUENCE sin un valor mínimo o máximo especificado. Sin embargo, debe especificar el MINVALUE y el valor de empezar con un par de razones diferentes.

En primer lugar, no hay nada que dice que una secuencia debe avanzar o aumenten de valor con cada incremento. Desea una secuencia que comienza en un número alto y disminuye cada vez que agregue un nuevo número. Otra razón que existen dos valores es que una secuencia puede ciclo vuelve al principio de la secuencia cuando se ejecuta fuera de los números.

Puede que desee crear una secuencia con un intervalo de 1 a 10.000, pero comienza con 1.000 y cuando se ejecuta fuera de los números que se inicia en una. Para hacer la secuencia vuelve al principio del ciclo cuando se ejecuta fuera de los números, especifique la palabra clave del ciclo al crear la secuencia, como se muestra en el siguiente código (puede utilizar la palabra clave sin ciclo para evitar que la secuencia de ciclismo vuelve al principio de la secuencia):

CREATE SEQUENCE dbo.MySequence AS INT MINVALUE 1 MAXVALUE 100000 CYCLE

Aquí es otro vistazo a este tipo de secuencia, con la palabra clave sin ciclo:

CREATE SEQUENCE dbo.MySequence AS INT MINVALUE 1 MAXVALUE 100000 NO CYCLE

Como puede ver en estos ejemplos, se especifica el tipo de datos que se va a utilizar la secuencia después de la palabra clave AS, que es el tipo de datos INT o entero. Otras opciones de valor de tipo de datos incluyen TINYINT, SMALLINT, BIGINT o cualquier tipo de datos definidos por el usuario que se basa en los tipos de datos aceptables.

Además de estos tipos de datos número entero, también puede utilizar los datos DECIMAL y NUMERIC, siempre están definidos con una escala de cero. Si no hay ningún tipo de datos especificado, la secuencia será la predeterminada para el tipo de datos BIGINT, lo que podría causar problemas si la tabla tiene una columna de tipo de datos de tipo entero donde el valor se almacena.

La siguiente opción, que es uno de los más importantes, es la memoria caché. La opción de caché indica al SQL Server: cuando su uso de la secuencia: cuántos valores para cargar en memoria cada vez que las necesidades de nuevos valores. El funcionamiento de la memoria caché es la gran diferencia entre cómo funcionan las secuencias y la propiedad de identidad.

Con la propiedad IDENTITY, SQL Server mantiene una caché de 20 valores en la memoria, que no se puede ajustar. El problema de rendimiento con la propiedad IDENTITY es que cada vez que inserte una nueva fila en la tabla y la propiedad de identidad emite un valor, el hecho de que se ha utilizado este valor se escribe en la base de datos de SQL Server. Más rápido se cargan las filas en la tabla, más rápido de SQL Server debe escribir estos metadatos para la base de datos.

A diferencia de la propiedad de identidad, una secuencia sólo se escribe en los metadatos de la base de datos que se emitieron los valores en primer lugar se ponen en la caché. Por ejemplo, si una secuencia emitido filas en lotes de 1.000, cuando el primer lote se emite el valor de 1.000 se escribe en los metadatos. Cuando se necesita el valor de 1.001, otro 1.000 valores se cargan en la caché y se escribe el valor de 2.000 a los metadatos. Esto reduce el número de escrituras de metadatos enormemente y puede mejorar el rendimiento de la base de datos.

A esto lo malo es que habrá huecos en los valores emitidos por la secuencia cada vez que se reinicie SQL Server. Cuando se cierra la base de datos, no escribe el último valor utilizado realmente a los metadatos. Por lo que si el último valor utilizado antes del apagado fue 1.005 (y tenemos la misma configuración como se describió anteriormente), cuando se inserta la fila siguiente después de la base de datos conecte, el siguiente valor utilizado será de 2.000.

Esto podría provocar una secuencia a quedarse sin números mucho más rápidamente que un valor de identidad. También podría provocar que los administradores a ser molesto que faltan valores, en cuyo caso deberán simplemente obtener sobre él y Aceptar que habrá números que faltan.

Si necesita SQL Server para utilizar todos los valores posibles, configurar una opción de caché de memoria caché NO. Esto hará que la secuencia de funcionan de forma muy similar a la propiedad de identidad. Sin embargo, influirá en el rendimiento de la secuencia debido a las escrituras de metadatos adicionales.

Para controlar la cantidad de números para omitir, utilice el ajuste de incremento de la secuencia. El valor de incremento puede ser cualquier número entero positivo o negativo, aunque un valor de uno es probablemente el incremento más comunes. El incremento por palabra clave se utiliza en la instrucción CREATE SEQUENCE:

CREATE SEQUENCE dbo.MySequence AS INT MINVALUE 1 MAXVALUE 100000 INCREMENT BY 3 CYCLE

Mediante una secuencia de

Hay varias maneras de utilizar una secuencia. Se puede asignar como valor predeterminado de la tabla, por lo que los valores de columna se especifican automáticamente al insertar filas en la tabla. Esto funciona de modo similar una tabla con la propiedad de identidad configurada.

La otra opción es extraer el siguiente valor de la secuencia desde dentro de un procedimiento almacenado (u otro código SQL/T). De este modo, puede utilizarlo durante el procesamiento de procedimiento almacenado (u otro código SQL/T).

Al especificar la secuencia para agregar automáticamente como un valor de columna al agregar nuevas filas a una tabla, establezca el valor predeterminado de la columna para extraer el siguiente valor de la secuencia, como se muestra aquí:

CREATE TABLE dbo.YourTable (YourTableId INT NOT NULL, AnotherColumn VARCHAR(10)) GO ALTER TABLE dbo.YourTable ADD DEFAULT NEXT VALUE FOR dbo.MySequence FOR YourTableId GO

Esto asigna los valores de una restricción cuando se insertan filas en una tabla en la misma forma que la propiedad de identidad.

Una de las cuestiones interesantes que puede hacer con una secuencia que no se puede hacer con la propiedad IDENTITY es agregar valores a la parte delantera del valor tomado de la secuencia. Si tiene que poner la letra "A" delante de los valores que procedentes de la secuencia, puede hacerlo fácilmente mediante la conversión de los resultados de la secuencia a un valor de carácter. A continuación, agregar el valor a la parte frontal, como se muestra aquí:

CREATE TABLE dbo.YourTable (YourTableId INT NOT NULL, AnotherColumn VARCHAR(10)) GO ALTER TABLE dbo.YourTable ADD DEFAULT ‘A’ + CAST(NEXT VALUE FOR dbo.MySequence as VARCHAR(10)) FOR YourTableId GO

Esto asigna los valores de una restricción cuando se insertan filas en una tabla de la misma manera que la propiedad de identidad, pero al anexar un valor de carácter al principio del valor recuperado.

Llamar a los valores de una secuencia en código normal de SQL/T (si dentro de un procedimiento almacenado o no) se realiza en gran parte del mismo modo. Utilice la sintaxis siguiente valor y especifique el nombre de la secuencia desde el que desea recuperar el valor siguiente. Esto extrae el siguiente valor disponible de una secuencia:

DECLARE @YourId INT SET @YourId = NEXT VALUE FOR dbo.MySequence

Otra buena manera de utilizar una secuencia es tener asignar a números de fila a las filas de un conjunto de filas. Utilice la sintaxis siguiente valor como parte de la instrucción select, como se muestra en este ejemplo:

SELECT NEXT VALUE FOR dbo.MySequence, * FROM sys.objects

Esto asigna un valor de una secuencia a cada fila de un conjunto de registros.

Como puede ver, esta nueva característica de secuencias es una herramienta muy eficaz. El número y variedad de usos de las secuencias en SQL Server sólo están limitados por su imaginación.

Denny Cherry

**Denny Cherry**tiene más de una década de experiencia en administración de SQL Server. Sus áreas de experiencia incluyen arquitectura del sistema, la optimización del rendimiento, la replicación y la solución de problemas. Posee varias certificaciones relacionadas con el SQL Server, incluyendo Microsoft Certified Master para SQL Server 2008. Ha sido un MVP de Microsoft SQL Server durante varios años y ha escrito numerosos libros y artículos técnicos sobre administración de SQL Server y cómo SQL Server se integra con distintas tecnologías.

Contenido relacionado