Particionamiento de tablas en MySQL


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

Anuncios

¿Qué estas pensando?

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.