Creación de tabla particionada en MySQL

Hola,logo_gps

como ya avanzamos en la anterior entrada sobre el mantenimiento de tablas particionadas, en esta ocasión os hablaremos de como crearlas ya sea una tabla nueva o una ya existente. Estos serían los pasos a seguir para cada caso:

Creación de nueva tabla particionada

Lo primero que debemos hacer es elegir qué campo, tipo de partición (RANGE, LIST, HASH y KEY) y valores usaremos para ello, así como saber si nuestra versión de MySQL lo permite y tenemos activado el plugin correspondiente, para esto último tan sólo hay que ejecutar «show plugins;«. Deberá aparecer entre ellos el plugin «partition» y con el valor de «Status» en «ACTIVE«. Si es así, podemos proseguir. Esta funcionalidad se agregó en MySQL 5.1 por lo que lo más seguro que no tengáis problemas en este sentido.

Una vez comprobado que disponemos del plugin activado, podremos empezar a crear una tabla particionada. Para esta tarea es muy importante tener en cuenta una limitación que tiene MySQL en su particionamiento: es necesario que el campo por el cual se va a particionar, deberá estar en todos y cada uno de los índices únicos en la tabla. Este será el mayor quebradero de cabeza que tengamos a la hora de crear una tabla, sobretodo si transformamos una ya existente. Teniendo esto presente crearemos por ejemplo la tabla «proveedores» y utilizaremos para filtrar el campo «codProvincia» y el tipo de partición «list», la sintaxis sería:

use nombre_base_de_datos;
CREATE TABLE proveedores ( 
razonSocial VARCHAR(50) NOT NULL,
observaciones VARCHAR(50) NOT NULL, 
codProvincia TINYINT UNSIGNED NOT NULL, 
fechaAlta DATE NOT NULL ) 
PARTITION BY LIST(codProvincia) ( 
PARTITION extremadura VALUES IN (1, 3), 
PARTITION aragon VALUES IN (2, 5, 8), 
PARTITION valencia VALUES IN (4, 9), 
PARTITION andalucia VALUES IN (6, 7, 10) );

Con la sentencia anterior habríamos creado la tabla proveedores y los habríamos dividido por comunidades, de esta forma en caso de realizar una búsqueda en vez de buscar en todos los proveedores a nivel nacional, se acotaría a una comunidad, reduciendo así el número de registros a examinar por la consulta y aumentando con ello su velocidad.

Lo que difiere de un create table no particionado es el código resaltado en negrita, por lo demás es igual. Este modo de trabajo no afecta a la hora de ejecutar consultas, pero sí cambiará a nivel interno la forma de ejecutarla reduciendo el volumen de datos a consultar, eso sí, habría que validar a través del código de la aplicación o un trigger que solo se permitan los valores introducidos en los filtros, en este caso del 1 al 10, de lo contrario daría error.

Particionar tabla ya existente

Si tuvieramos la tabla anterior sin particionar ya creada habría que particionarla usando la sentencia ALTER TABLE: 

ALTER TABLE proveedores PARTITION BY LIST(codProvincia)
 (PARTITION extremadura VALUES IN (1, 3), 
 PARTITION aragon VALUES IN (2, 5, 8), 
 PARTITION valencia VALUES IN (4, 9), 
 PARTITION andalucia VALUES IN (6, 7, 10));

Si quisiéramos añadir otra comunidad más, como Galicia por ejemplo habría que ejecutar:

ALTER TABLE proveedores ADD PARTITION(PARTITION galicia VALUES IN (11,12,13,14));

Esperamos que esta entrada os haya sido de utilidad,

Nos vemos en próximas entradas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *