El particonamiento de tabla en las bases de datos es una técnica para dividir en segmentos lógicos las tablas de datos para que al momento de hacer búsquedas estas se puedan realizar sobre grupos mas pequeños de datos.
Existen 4 formas de implementar las particiones en MySQL, las cuales son:
- By key
- By range
- By Hash
- By List
Pero mas importante que los tipos de particionamiento son al condiciones para implementarlo, por lo que lo veremos a través de casos
Caso A: Tabla sin llave
Este es el caso más sencillo, para lo cual vamos a crear una tabla sencilla
- create table casoa(
- clave int,
- nombre char(20),
- edad int)
- engine=innodb;
En esta tabla aplicaremos un particionamiento por rango (by range)
- Alter table casoa partition by range(edad)(
- Partition s1 less than(18) ,
- Partition s2 less than(50)
- );
Al no haber una llave primaria, no hubo ningún problema
Caso B: Tabla con llave
Vamos a crear una nueva tabla sencilla, solo que ahora vamos a definir un campo llave
- create table casob(
- clave int,
- nombre char(20),
- edad int,
- Primary key(clave))
- engine=innodb;
En esta tabla aplicaremos un particionamiento por rango nuevamente (by range)
- Alter table casob partition by range(edad)(
- Partition s1 less than(18) ,
- Partition s2 less than(50)
- );
Al una llave primaria, vamos a obtener el siguiente mensaje de error.
Como la tabla tiene llave debemos crear el particionamiento empleando la llave primaria
- Alter table casob partition by key(clave) partitions 4;
Ahora bien, debemos de aclarar que esto no obliga a que solo podamos usar by key.
Caso C: Tabla con superllave
Ahora veamos que ocurra cuando una tabla emplea una superllave, la cual como sabemos es cuando dos campos en conjunto forman la llave primaria
- create table casoc(
- clave int,
- nombre char(20),
- edad int,
- Primary key(clave, edad))
- engine=innodb;
En esta tabla aplicaremos un particionamiento por rango nuevamente (by range)
- Alter table casob partition by range(edad)(
- Partition s1 less than(18) ,
- Partition s2 less than(50)
- );
Como podemos ver, se puede crear una partición de un campo que forma parte de la superllave y es posible aplicar otros tipos de particionamiento diferentes al by key.
Caso D: Tabla con llave foranea
Ahora veamos que ocurra cuando una tabla emplea una superllave, la cual como sabemos es cuando dos campos en conjunto forman la llave primaria, primero vamos a crear una tabla con llave primaria
- create table casow(
- clave int,
- nombre char(20),
- edad int,
- Primary key(clave))
- engine=innodb;
Ahora vamos a crear una tabla que se relacione con esta, empleando una llave foranea
- create table relacionw(
- folio int,
- clave int,
- nombre text,
- primary key(folio),
- foreing key(clave) references casow(clave))
- engine=innodb;
Ahora trataremos de crear una partición con la siguiente sentencia:
- Alter table relacionw partition by key(folio) partition 4;
Ante lo cual nos aparece el siguiente error:
Desafortunadamente lo unico que hay por hacer es eliminar la relación foreign key de la tabla relacion pero dejar el campo como un indice normal para que se mantenga la bsuqueda y relación rapida entre las tablas.
Para concluir los dejamos con los videos donde mostramos estos casos:
Quedamos a la espera de sus comentarios