Buscar..


Observaciones

  • RANGO de particionamiento . Este tipo de partición asigna filas a particiones basadas en valores de columna que se encuentran dentro de un rango determinado.

  • Partición de la lista . Similar a la partición por RANGO, excepto que la partición se selecciona en base a columnas que coinciden con uno de un conjunto de valores discretos.

  • Particionamiento HASH . Con este tipo de partición, se selecciona una partición en función del valor devuelto por una expresión definida por el usuario que opera en valores de columna en filas para insertarse en la tabla. La función puede consistir en cualquier expresión válida en MySQL que produzca un valor entero no negativo. Una extensión de este tipo, LINEAR HASH , también está disponible.

  • Partición clave . Este tipo de partición es similar a la partición por HASH, excepto que solo se suministran una o más columnas para evaluar, y el servidor MySQL proporciona su propia función de hashing. Estas columnas pueden contener valores distintos a los enteros, ya que la función de hashing proporcionada por MySQL garantiza un resultado entero independientemente del tipo de datos de la columna. Una extensión de este tipo, LINEAR KEY , también está disponible.

RANGO de particionamiento

Una tabla que está particionada por rango se particiona de tal manera que cada partición contiene filas para las cuales el valor de la expresión de partición se encuentra dentro de un rango dado. Los rangos deben ser contiguos, pero no superpuestos, y se definen utilizando el operador VALUES LESS THAN operador. Para los siguientes ejemplos, suponga que está creando una tabla como la siguiente para almacenar registros de personal para una cadena de 20 tiendas de video, numeradas del 1 al 20:

CREATE TABLE employees (
    id INT NOT NULL,
    fname VARCHAR(30),
    lname VARCHAR(30),
    hired DATE NOT NULL DEFAULT '1970-01-01',
    separated DATE NOT NULL DEFAULT '9999-12-31',
    job_code INT NOT NULL,
    store_id INT NOT NULL
);

Esta tabla se puede dividir por rango de varias maneras, según sus necesidades. Una forma sería usar la columna store_id . Por ejemplo, puede decidir dividir la tabla en 4 formas agregando una cláusula PARTITION BY RANGE como se muestra aquí:

ALTER TABLE employees PARTITION BY RANGE (store_id) (
    PARTITION p0 VALUES LESS THAN (6),
    PARTITION p1 VALUES LESS THAN (11),
    PARTITION p2 VALUES LESS THAN (16),
    PARTITION p3 VALUES LESS THAN MAXVALUE
);

MAXVALUE representa un valor entero que siempre es mayor que el mayor valor entero posible (en lenguaje matemático, sirve como un límite mínimo superior).

Basado en el documento oficial de MySQL .

Partición de la lista

La partición de listas es similar a la partición de rango de muchas maneras. Como en la partición por RANGO, cada partición debe definirse explícitamente. La principal diferencia entre los dos tipos de partición es que, en la partición de lista, cada partición se define y selecciona en función de la pertenencia de un valor de columna en una de un conjunto de listas de valores, en lugar de en uno de un conjunto de rangos contiguos de valores. Esto se hace usando PARTITION BY LIST(expr) donde expr 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 VALUES IN (value_list) , donde value_list es un Lista de enteros separados por comas.

Para los ejemplos que siguen, asumimos que la definición básica de la tabla a particionar es proporcionada por la CREATE TABLE que se muestra aquí:

CREATE TABLE employees (
    id INT NOT NULL,
    fname VARCHAR(30),
    lname VARCHAR(30),
    hired DATE NOT NULL DEFAULT '1970-01-01',
    separated DATE NOT NULL DEFAULT '9999-12-31',
    job_code INT,
    store_id INT
);

Supongamos que hay 20 tiendas de video distribuidas entre 4 franquicias, como se muestra en la siguiente tabla.

Región Números de identificación de la tienda
norte 3, 5, 6, 9, 17
Este 1, 2, 10, 11, 19, 20
Oeste 4, 12, 13, 14, 18
Central 7, 8, 15, 16

Para particionar esta tabla de tal manera que las filas de las tiendas que pertenecen a la misma región se almacenen en la misma partición

ALTER TABLE employees PARTITION BY LIST(store_id) (
    PARTITION pNorth VALUES IN (3,5,6,9,17),
    PARTITION pEast VALUES IN (1,2,10,11,19,20),
    PARTITION pWest VALUES IN (4,12,13,14,18),
    PARTITION pCentral VALUES IN (7,8,15,16)
);

Basado en el documento oficial de MySQL .

Particionamiento HASH

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

La siguiente declaración crea una tabla que usa hashing en la columna store_id y se divide en 4 particiones:

CREATE TABLE employees (
    id INT NOT NULL,
    fname VARCHAR(30),
    lname VARCHAR(30),
    hired DATE NOT NULL DEFAULT '1970-01-01',
    separated DATE NOT NULL DEFAULT '9999-12-31',
    job_code INT,
    store_id INT
)
PARTITION BY HASH(store_id)
PARTITIONS 4;

Si no incluye una cláusula de PARTITIONS , el número de particiones por defecto es 1.

Basado en el documento oficial de MySQL .



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow