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.