[SQL 2008] Delete TOP con Chunking Data.

21 07 2009

Saludos amigos después de la recuperación satisfactoria del pequeño accidente que sufrí, he vuelto a escribir un articulo sobre una nueva opción de la clausula DELETE TOP disponible en SQL Server 2008.

En SQL Server 2008 la clausula TOP se puede utilizar para Insertar, Eliminar, o Actualizar datos, en pocas palabras se puede utilizar con las sentencias INSERT, DELETE Y UPDATE.

El ejemplo que les dejo muestra el uso de TOP para fragmentar “CHUNKING” información de una tabla, es decir, en lugar de ejecutar una sentencia DELETE para ejecutar una sola operación, podemos fragmentar los datos en pequeñas partes  y hacer que sea más ligera la operación, y así mejorar el rendimiento y concurrencia de la base de datos para tablas grandes que tengan un acceso frecuente.

Esta técnica se utiliza para el manejo de grandes cargas de datos para informes o aplicaciones de tipo data warehouse. Los Grandes o Simples conjuntos de actualizaciones, pueden hacer que se incremente considerablemente el archivo de Transacciones Transaction log”.  Al procesar en partes la información, cada una de es confirmada después de la terminación de su ejecución “COMMIT”, permitiendo que el servidor del SQL reutilice potencialmente ese espacio del registro de transacciones.

Además del incremento en el registro de transacciones, en una actualización muy grande de datos, si la consulta es cancelada, usted puede tener que esperar un gran lapso de tiempo mientras que la transacción se deshace “Rolls Back”. Con partes más pequeñas, usted puede continuar con su actualización de manera más rápida. También, el “Chunking” permite más concurrencia contra la tabla modificada, permitiendo que las consultas de usuario se ejecuten, en lugar de esperar varios minutos para que una modificación grande termine.

Para este ejemplo crearemos una tabla temporal en la cual insertaremos 5000 registros, posteriormente realizaremos un DELETE TOP para eliminar la información en lotes de 250 Filas, de esta manera eliminaremos la información en pequeñas partes generando operaciones ligeras y no una sola operación que elimine todos los registros en una sola ejecución.

 

1. Crearemos una tabla temporal para insertar los 5000 registros.

USE prueba;
GO

-- Creando la tabla Temporal.
DECLARE @tabla TABLE(id BIGINT, nombre VARCHAR(100));
DECLARE @j bigint = 1;

-- Insertanto los 5000 registros en la tabla temporal.
WHILE @j <= 5000
BEGIN

    INSERT INTO @tabla VALUES(@j,'Usuario' + CAST(@j AS varchar(4)));

SET @j = @j + 1;
END

 

2. Contamos los datos Insertados.

image

3. Recorremos los registros y los eliminamos en fragmentos de 250 registros.

-- Recorriendo los resgistros de la tabla.
WHILE (SELECT COUNT(*)FROM @tabla)> 0
BEGIN
    DELETE TOP(250) -- Eliminando en fragmentos de 250 registros
    FROM @tabla
END

El script completo quedaría de la siguiente manera:

USE prueba;
GO

SET NOCOUNT ON;

-- Creando la tabla Temporal.
DECLARE @tabla TABLE(id BIGINT, nombre VARCHAR(100));
DECLARE @j bigint = 1;

-- Insertanto los 5000 registros en la tabla temporal.
WHILE @j <= 5000
BEGIN

    INSERT INTO @tabla VALUES(@j,'Usuario' + CAST(@j AS varchar(4)));

SET @j = @j + 1;
END

--------------------------------------------------->>>
--------------------------------------------------->>>

-- Contando los registros antes de la eliminación.
SELECT COUNT(id) AS 'Antes de eliminar' FROM @tabla 

--------------------------------------------------->>>
--------------------------------------------------->>>

SET NOCOUNT OFF;

-- Recorriendo los resgistros de la tabla.
WHILE (SELECT COUNT(*)FROM @tabla)> 0
BEGIN
    DELETE TOP(250) -- Eliminando en fragmentos de 250 registros
    FROM @tabla
END

--------------------------------------------------->>>
--------------------------------------------------->>>

-- Contando los registros despues de la eliminación.
SELECT COUNT(id) AS 'Despues de eliminar' FROM @tabla  

--------------------------------------------------->>>
--------------------------------------------------->>>

 

Resultado:

image

image

image

Espero les sea de ayuda, dejen comentarios y por favor apóyenme votando por mi Blog.

 

votaPorMiBlogIvan Apóyame votando aquí: http://blogit.ms/TopBloggers.aspx en la categoría SQL Server. Los pasos para votar están aquí te llevara 3 min: Clic Aquí.

Etiquetas de Technorati: ,,,




[SQL] Instrucciones básicas de SQL 2005.

30 01 2009

Hola amigos, en esta ocasión este post va dedicado a las personas que se inician en las consultas de base de datos y sus operaciones básicas como lo son el INSERT, UPDATE, DELETE y SELECT.

Colocare un ejemplo de cada instrucción:

INSERT:

INSERT INTO <TABLA> (<CAMPOS A INSERTAR>) VALUES (<VALORES A INSERTAR>)

INSERT INTO dbo.USUARIO_SYS (nombre, apellidos, email, pass, fecha_add)
                     VALUES ('JOSE','PEREZ','mail@mail.com','a47825',GETDATE() )

SELECT:

SELECT <CAMPOS> FROM <TABLA>

WHERE <CONDICIONES> ORDER BY <CRITERIOS DE ORDENACION>

SELECT id, nombre, apellidos, email, pass, fecha_add FROM dbo.USUARIO_SYS
WHERE id < 12 ORDER BY nombre, apellidos

UPDATE:

UPDATE <TABLA> SET <CAMPO N> = <VALOR>

WHERE <CONDICION DE ACTUALIZACION>

UPDATE dbo.USUARIO_SYS SET nombre = 'FLORIPONDIO', apellidos = 'MADALENO'
WHERE id = 12

DELETE:

DELETE FROM <TABLA> WHERE <CONDICION DE ELIMINACION>

DELETE FROM dbo.USUARIO_SYS WHERE id = 12

Espero les sea de ayuda, dejen comentarios!!!








Seguir

Get every new post delivered to your Inbox.