Como particionar una tabla existente (es-ES)
Una de las tareas más deseadas hoy en día por muchos administradores de bases de datos, es el particionar sus tablas, una de las grandes ventajas del particionamiento de tablas en SQL Server, es la capacidad de distribuir la carga física en múltiples discos duros, por ende, existen más partes mecánicas ejecutando una sola tarea.
Sin embargo, gran parte de estas bases de datos existen desde hace mucho tiempo, por lo que no se encuentran particionadas en su gran mayoría, además de estar soportando actualmente aplicaciones de negocio, debido a esto, no es posible realizar un rediseño en donde las tablas puedan ser eliminadas y reconstruidas.
Tabla Original
CREATE TABLE Clientes
(id int identity(1,1),
Nombre varchar(100),
Apellido varchar(100))
Datos de prueba
id Nombre Apellido
1 John Bocachica
2 Juliana Salcedo
3 Pilar Villate
4 Valentina Villavicencio
(4 row(s) affected)
Verificación de los datos en las particiones
Select partition_number, rows from sys.partitions
where object_id = object_id('Clientes')
partition_number rows
1 2
(1 row(s) affected)
Proceso para particionar la tabla existente
El proceso realmente es sencillo, consiste en crear un índice particionado tipo cluster sobre la tabla, de esta forma los datos se mueven a sus respectivas particiones.
Paso 1 - Crear los filegroups y los datafiles
USE [master]
GO
ALTER DATABASE [TEST] ADD FILEGROUP [SECUNDARIO]
GO
ALTER DATABASE [TEST] ADD FILE ( NAME = N'OTROARCHIVODEDATOS', FILENAME = N'F:\DATA\OTROARCHIVODEDATOS.ndf' , SIZE = 3072KB , FILEGROWTH = 1024KB ) TO FILEGROUP [SECUNDARIO]
GO
Paso 2 – Crear la función de particionamiento
CREATE PARTITION FUNCTION FuncionDemo(int)
AS RANGE LEFT FOR VALUES (2)
Paso 3 – Crear el esquema de particionamiento
CREATE PARTITION SCHEME EsquemaDemo
AS PARTITION FuncionDemo
TO ([PRIMARY], SECUNDARIO)
Paso 4 – Verificar si el índice existe, si su tabla ya cuenta con el índice, vaya al paso 6, de lo contrario, vaya al paso 5
Paso 5 – Crear el índice asociado al esquema
CREATE CLUSTERED INDEX IndiceParaParticionar
ON Clientes
(
ID asc
)
ON EsquemaDemo(id)
Paso 6 – Crear el índice asociado al esquema eliminando el existente
CREATE CLUSTERED INDEX IndiceParaParticionar
ON Clientes
(
ID asc
) WITH (DROP_EXISTING = ON)
ON EsquemaDemo(id)
Ahora puede verificar que los datos estén particionados, nuevamente puede ejecutar el link de Verificación de los datos en las particiones
partition_number rows
1 2
2 2
(2 row(s) affected)
De igual manera se puede verificar directo en la tabla.
SELECT * FROM Clientes
WHERE $PARTITION.FuncionDemo(ID) = 1;
id Nombre Apellido
1 John Bocachica
2 Juliana Salcedo
(2 row(s) affected)
SELECT * FROM Clientes
WHERE $PARTITION.FuncionDemo(ID) = 2;
id Nombre Apellido
3 Pilar Villate
4 Valentina Villavicencio
(2 row(s) affected)