MySQL - Particionamiento


Particionamiento

El estándar SQL no proporciona mucha orientación con respecto a los aspectos físicos del almacenamiento de datos. El lenguaje SQL en sí está diseñado para funcionar independientemente de cualquier estructura de datos o medios subyacentes a los esquemas, tablas, filas o columnas con las que trabaja. No obstante, los sistemas de administración de bases de datos más avanzados han desarrollado algunos medios para determinar la ubicación física que se usará para almacenar datos específicos en términos de sistema de archivos, hardware o incluso ambos. En MySQL, el InnoDB motor de almacenamiento ha soportado durante mucho tiempo la noción de un espacio de tabla, y el servidor MySQL, incluso antes de la introducción de la partición, podría configurarse para emplear diferentes directorios físicos para almacenar diferentes bases de datos.

La creación de particiones lleva esta noción un paso más allá, al permitirle distribuir porciones de tablas individuales en un sistema de archivos de acuerdo con reglas que puede establecer en gran medida según sea necesario. En efecto, las diferentes partes de una tabla se almacenan como tablas separadas en diferentes ubicaciones. La regla seleccionada por el usuario mediante la cual se realiza la división de datos se conoce como función de partición, que en MySQL puede ser el módulo, la comparación simple con un conjunto de rangos o listas de valores, una función hash interna o una función hash lineal. La función se selecciona de acuerdo con el tipo de partición especificado por el usuario y toma como parámetro el valor de una expresión proporcionada por el usuario. Esta expresión puede ser un valor de columna, una función que actúa sobre uno o más valores de columna, o un conjunto de uno o más valores de columna, según el tipo de partición que se utilice.

Tipos de particionamiento:

Partición de RANGO: Una tabla que se particiona por rango se particiona de tal manera que cada partición contiene filas para las que el valor de la expresión de partición se encuentra dentro de un rango determinado. Los rangos deben ser contiguos, pero no superpuestos y se definen mediante el VALUES LESS THAN operador.

Particionamiento de LISTA: El particionamiento de listas en MySQL es similar al particionamiento de rangos en muchos aspectos. Al igual que en la partición por RANGE, cada partición debe definirse explícitamente. La principal diferencia entre los dos tipos de particiones es que, en la partición de listas, cada partición se define y selecciona en función de la pertenencia de un valor de columna a uno de un conjunto de listas de valores, en lugar de a uno de un conjunto de rangos contiguos de valores. Esto se hace usando donde es un valor de columna o una expresión basada en un valor de columna y devolviendo un valor entero, y luego definiendo cada partición por medio de, donde es una lista de enteros separados por comas.

Particionamiento de COLUMNAS: El particionamiento COLUMNS permite el uso de varias columnas en las claves de particionamiento. Todas estas columnas se tienen en cuenta con el fin de colocar filas en particiones y determinar qué particiones se verificarán para filas coincidentes en la poda de particiones.

Particionamiento de HASH: La partición por HASH se utiliza principalmente para garantizar una distribución uniforme de los datos entre un número predeterminado de particiones. Con el particionamiento por rango o lista, debe especificar explícitamente en qué partición se almacenará un valor de columna dado o un conjunto de valores de columna; con el particionamiento hash, MySQL se encarga de esto por usted, y sólo necesita especificar un valor de columna o una expresión basada en un valor de columna que se va a dividir y el número de particiones en las que se dividirá la tabla particionada.

Particionamiento de CLAVE: El particionamiento por clave es similar al particionamiento por hash, excepto que cuando el particionamiento por hash emplea una expresión definida por el usuario, el servidor MySQL proporciona la función de hash para el particionamiento por clave. NDB Cluster utiliza MD5 para este fin; para las tablas que usan otros motores de almacenamiento, el servidor emplea su propia función interna de hashing que se basa en el mismo algoritmo que PASSWORD.

NOTA: El particionamiento no soporta llaves foráneas.

Particionamiento por HASH


                alter table tabla_ejemplo partition by hash(id) partitions 100;
                

Como se mencionó anteriormente el particionamiento por HASH espera un valor especificado por el usuario en este caso id y también espera le indiques el número de particiones, en este caso 100.

Particionamiento por CLAVE


                alter table tabla_ejemplo partition by key() partitions 10;
                

Particionamiento por RANGO


                alter table tabla_ejemplo partition by range(year(created_at)) (
                    partition year2019 values less than (2019),
                    partition year2020 values less than (2020),
                    partition year2021 values less than (2021),
                    partition year2022 values less than (2022),
                    partition yearRest values less than maxvalue
                );
                

Para que el particionamiento por RANGO funcione de la forma especificada, deberá ser agregado created_at al índice de la llave primaria y dicho campo deberá ser NOT NULL.

Remover el particionamiento


                alter table tabla_ejemplo remove partitioning;
                

Forcsec
Todos los derechos reservados


Al navegar y hacer uso de nuestros servicios aceptas los términos y condiciones.