Archivo de la etiqueta: SQL Server 2008

Fragmentación Horizontal en SQL Server 2008

La “Fragmentación Horizontal en SQL Server 2008” es una técnica ampliamente utilizada en el caso de que existan millares de registros en una tabla, a continuación se muestra cómo se implementa, además de un ejercicio práctico para probar:

[1].- Se creará una tabla Normal y otra para la implementación de la Fragmentación;

[2].- Se implementará un “store procedure” para el registro de 1’000.000 de datos;

[3].- Luego, se podrán realizar las respectivas pruebas con respecto a los tiempos del INSERT, UPDATE, DELETE y SELECT.

1.- Creación de Tablas.-

CREATE TABLE NORMAL
(
	LLAVE BIGINT NOT NULL PRIMARY KEY,
	DATO BIGINT NULL
)
GO

ALTER DATABASE db_fragmentacion
ADD FILEGROUP grupo1
GO

ALTER DATABASE db_fragmentacion
ADD FILE(
	NAME = datos1,
	FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\datos1.ndf',
	SIZE = 50MB,
	MAXSIZE = 500MB,
	FILEGROWTH = 50MB
)
TO FILEGROUP grupo1
GO

CREATE PARTITION FUNCTION particionDatos1(BIGINT)
AS RANGE RIGHT FOR VALUES
(100000, 200000, 300000, 400000, 500000, 600000, 700000, 800000, 900000, 1000000, 1100000)
ALL TO (grupo1)
GO

CREATE PARTITION SCHEME myEsquema1
AS PARTITION particionDatos1
ALL TO (grupo1)
GO

CREATE TABLE PARTICIONADA (
	LLAVE BIGINT NOT NULL PRIMARY KEY,
	DATO BIGINT NULL
) ON myEsquema1(LLAVE)
GO

2.- Creación de los procedimientos almacenados 

CREATE PROCEDURE ins_normal( @v1 BIGINT )
AS
BEGIN
	WHILE @v1 > 0
	BEGIN
		INSERT INTO NORMAL VALUES (@v1, @v1);
		SET @v1 = @v1 - 1;
	END
END
GO

CREATE PROCEDURE ins_particionada( @v1 BIGINT )
AS
BEGIN
	WHILE @v1 > 0
	BEGIN
		INSERT INTO PARTICIONADA VALUES (@v1, @v1);
		SET @v1 = @v1 - 1;
	END
END
GO

3.- Scripts respectivos para las pruebas del INSERT, UPDATE, DELETE, SELECT

EXEC ins_normal 1000000
GO

EXEC ins_particionada 1000000
GO

SELECT * FROM NORMAL
GO

SELECT * FROM PARTICIONADA
GO

Bueno, espero les sirva.