Fragmentación Horizontal en MySQL

La “Fragmentación Horizontal” 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 PRIMARY KEY, DATO BIGINT ) ENGINE = MyISAM;

CREATE TABLE PARTICIONADA ( LLAVE BIGINT, DATO BIGINT ) ENGINE = MyISAM
PARTITION BY RANGE (LLAVE)
(
	PARTITION P1 VALUES LESS THAN (100000),
	PARTITION P2 VALUES LESS THAN (200000),
	PARTITION P3 VALUES LESS THAN (300000),
	PARTITION P4 VALUES LESS THAN (400000),
	PARTITION P5 VALUES LESS THAN (500000),
	PARTITION P6 VALUES LESS THAN (600000),
	PARTITION P7 VALUES LESS THAN (700000),
	PARTITION P8 VALUES LESS THAN (800000),
	PARTITION P9 VALUES LESS THAN (900000),
	PARTITION P10 VALUES LESS THAN (1000000),
	PARTITION P11 VALUES LESS THAN (1100000)
);


2.- Creación de los procedimientos almacenados 

delimiter !!
CREATE PROCEDURE ins_normal(v1 BIGINT)
BEGIN
	WHILE v1 > 0 DO
		INSERT INTO NORMAL VALUES (v1, v1);
		SET v1 = v1 - 1;
	END WHILE;
END !!
delimiter ;

delimiter !!
CREATE PROCEDURE ins_particionada(v1 BIGINT)
BEGIN
	WHILE v1 > 0 DO
		INSERT INTO PARTICIONADA VALUES (v1, v1);
		SET v1 = v1 - 1;
	END WHILE;
END !!
delimiter ;


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

call ins_normal(1000000);
call ins_particionada(1000000);

SELECT * FROM NORMAL LIMIT 0, 1000000;
SELECT * FROM PARTICIONADA LIMIT 0, 1000000;
SET SQL_SAFE_UPDATES = 0;

UPDATE NORMAL SET DATO = DATO + 10;
UPDATE PARTICIONADA SET DATO = DATO + 10;

DELETE FROM NORMAL;
DELETE FROM PARTICIONADA;

Bueno, espero les sirva.