Particionado de tablas en MySQL
¿Que es el particionado de tablas?
El particionado de tablas MySQL permite distribuir porciones de tablas en un sistema de ficheros. Esta distribución se realiza de acuerdo con unas reglas llamadas funciones de particionado. Existen varias funciones distintas:
- Por Rango: Se asigna a cada partición un rango de valores. Existe una variante parecida llamada “Por Lista” en el que se particiona según una lista de valores proporcionados a la hora de crear la tabla.
- Por Hash; Se utiliza para conseguir una distribución homogénea de los datos en las particiones. Debemos asignar una función de hash interna que sera ejecutada por MySQL cada vez que se realiza una inserción, actualización o borrado.
Existe una variante llamada “hash lineal”, que proporciona mas velocidad a la hora de añadir, borrar, fusionar y separar particiones. Este tipo de particionado es ideal para tablas con muchos datos. - Por Clave: Es similar al particionado “Por Hash”, la diferencia es que es el sistema el que configura la clave.
MySQL tambien permite el subparticionado, que consiste en particionar una partición en varias subparticiones.
¿Que tipos de particionados tenemos disponibles?
Existen dos tipos de particionados:
- Particionado Horizontal: Consiste en tener varias tablas con las mismas columnas en cada una y distribuir los registros entre las tablas.
- Particionado Vertical: Las distintas columnas de la tabla se asignan a una partición en concreto, este tipo de particionado es el que suele utilizarse normalmente sin darse cuenta cuando se referencia a otra tabla mediante una clave foránea.
La versión actual de MySQL(5.5) y la próxima versión (5.6) solo disponen de soporte para el particionamiento horizontal.
¿Que conseguimos con el particionamiento de tablas?
La principal ventaja del particionamiento de tablas es la de optimizar del acceso a los datos que almacena la base de datos MySQL. A la hora de realizar una consulta a una tabla particionada, la búsqueda no se realizara en toda la tabla, sino que solo se buscara en las zonas de la tabla donde se encuentren los datos que buscamos, con esto se reducen las lecturas físicas a la base de datos.
Ademas el particionado ofrece escalabilidad y flexibilidad, ya que podemos guardar cada partición en distintos discos físicos e incluso en distintos servidores en distintos datacenters, permitiendo incluso mejorar la latencia en la transmisión de datos debido a la posible colocación de las distintas particiones en distintas ubicaciones geográficas.
Ademas de todas estas ventajas, también existen algunos inconvenientes ya que la dificultad de administración de la bases de datos se incrementara.
También hay que tener en cuenta que el particionado de las tablas no es estático, MySQL tiene herramientas para poder cambiar la configuración del particionado y realizar cambios en las particiones existentes.
Limitaciones del particionado de tablas
- Debemos utilizar el mismo motor de almacenamiento para todas las particiones de una misma tabla.
- A partir de MySQL 5.5 no sera posible utilizar el particionado de tablas en los siguientes motores de almacenamiento: MERGE, CSV y FEDERATED.
- El particionamiento por clave solo es posible utilizando el motor de almacenamiento NDBCLUSTER.
- No podremos utilizar funciones almacenadas ni declarar variables ni variables de usuario.
- Se pueden utilizar operadores aritméticos o lógicos siempre y cuando devuelvan un resultado de tipo entero o nulo.
- No podemos utilizar operadores a nivel de bits.
- Existe un limite de 1024 particiones de una tabla.
- Las claves foráneas no están soportadas.
- Los indices FULLTEXT no están soportados.
- Los tipos de datos POINT o GEOMETRY no están soportados.
- Las tablas temporales y las tablas de logs no se pueden particionar.
- Una clave de particionado no puede ser una subconsulta.
- La cache de claves no esta soportada.
- La función DELAYED no esta soportada.
- No se puede utilizar “mysqlcheck” ni “myisamchk” para reparar tablas particionadas.
Requisitos para particionar tablas en MySQL
Solo hay un requisito a la hora de particionar tablas en MySQL. El MySQL debe estar compilado con soporte para particionado. Los ejecutables distribuidos en la pagina oficial tienen activada esta opción por defecto.
¿Cuando es el momento de particionar tablas en MySQL?
El particionamiento de tablas en MySQL puede dar muchos mas problemas que soluciones en muchos de los casos en los que se podría utilizar. Muchos de los grandes de Internet han recurrido a esta técnica para aumentar la escalabilidad de su servicio y mejorar el acceso a sus datos.
Solo es necesario recurrir a esta técnica cuando el volumen de datos comienza a ser completamente inmanejable y el gran volumen de transacciones hacen que los accesos a la base de datos sean lentos.

[...] http://www.solinux.es/2012/particionado-de-tablas-en-mysql/ February 16, 2012 // MySQL // No Comments // [...]