Con la aparición de la versión 5.1 de MySQL, se incluyó en éste el particionado de tablas (algo que en PostgreSQL ya existía hace tiempo) por lo que me he animado a escribir sobre el tema.
El particionado de tablas es una técnica que se usa para reducir la cantidad de lecturas físicas a la base de datos cuando ejecutamos consultas, existen dos principales modalidades de particionado: horizontal y vertical. ¡Vamos a los detalles!
Vertical: Esta modalidad generalmente la aplicamos en nuestros diseños de base de datos sin darnos cuenta, por ejemplo cuando tenemos una columna de tipo BLOB con una fotografía o un texto muy largo que no leemos frecuentemente y decidimos ponerla en otra tabla referenciandola con la clave foránea.
Ahora bien, el particionado horizontal es el que vamos a comentar, ya que el problema radica en cómo hacer para que nuestras aplicaciones sepan en que tabla guardar el registro dependiendo del año (porque obviamente no le vamos a agregar esas condiciones a nuestra aplicación); esto se logra agregando una serie de sentencias y condiciones en la definición de las tablas.
En los siguientes enlaces se muestra como hacerlo:
En el ejemplo de MySQL se puede observar la gran diferencia de rendimiento con dos tablas que tienen exactamente la misma data (8 millones de registros), una sin particionar y la otra particionada por años. Al realizar una consulta filtrando por la columna en la cual se basó el particionado se obtuvieron los siguientes resultados:
¡Asombroso nooo!