Serie MySQL: 10 particiones-tipos de particiones

Directo al grano

         En términos sencillos , la partición consiste en dividir una tabla (generalmente una tabla grande) en varias partes . Generalmente, las bases de datos comerciales admiten la partición, que se utiliza para romper el límite del tamaño de archivo del sistema operativo y también para acelerar la consulta de grandes mesas. Por ejemplo, la tabla de particiones de Oracle puede almacenar diferentes partes de la tabla en diferentes espacios de tabla. De manera similar, debido a que MySQL activa la opción innodb_file_per_table de forma predeterminada , cada tabla corresponde a un archivo de datos (es decir, un espacio de tabla), por lo que las particiones MySQL también almacenan diferentes partes de la tabla en diferentes archivos de datos (espacios de tabla).

         La partición de MySQL también se denomina partición horizontal , es decir, los datos de la fila de la tabla se dividen horizontalmente en diferentes subconjuntos, y la división de diferentes subconjuntos depende de la función de partición. MySQL admite cuatro tipos de partición: RANGE, LIST, HAS y KEY . Los diferentes tipos de partición también admiten diferentes variantes. A continuación, se describen estas cuatro particiones en detalle y se ofrecen ejemplos de sintaxis de creación de tablas relacionadas.

partición de rango

         La partición de rango utiliza rangos continuos y no superpuestos para dividir la tabla. Como el número de serie 1 ~ 1000, 1001 ~ 2000, 2001 ~ valor máximo, etc .;

Declaración de construcción de mesa

create table range_par1 (id int(11) not null) partition by range(id) (partition pt1000 values less than (1000) );

 

    La declaración SQL anterior crea la tabla range_par1 dividiendo las filas con ID menor que 1000 en la partición pt1000 por rango. Al insertar un registro con ID 1001 en la tabla, se informa un error de partición no encontrada.

Columnas variantes

         La partición de rango admite variantes de columna, que pueden dividir varias columnas. Tal como:

mysql> create table range_col_par1 (id int(11) not null, id2 int(11) not null) partition by range columns(id,id2) (partition pt1000 values less than (1000,1000) );

Query OK, 0 rows affected (0.55 sec)

partición de lista (tipo discreto)

         Similar a la partición de rango, la lista también está dividida por el rango de la columna, pero la partición de lista necesita especificar el rango por sí misma, que se convierte en una partición discreta.

Declaración de construcción de mesa

create table list_par1 (id int(11) not null) partition by list(id) (partition p0 values in (1,3));

 

Como se indicó anteriormente, el registro con el valor de id de 1 o 3 es la partición p0. Inserte el registro con ID 2 e informe el error de partición no encontrada;

Columnas variantes

De manera similar, la partición de lista admite la variante de columnas, que se puede usar para particionar una o más columnas, de la siguiente manera:

 

partición hash

         A diferencia de las particiones de rango y lista mencionadas anteriormente, la partición hash puede distribuir uniformemente los registros de fila relacionados a cada partición realizando una operación hash en la columna especificada.

Declaración de construcción de mesa

create table hash_par1 (id int(3) not null) partition by hash(id) partitions 4;

 

    Como arriba, se crea la tabla de particiones hash hash_part1, y la columna ID se usa como la variable hash para dividir en cuatro particiones, insertar 0-9 filas en la base de datos y ver la distribución de filas a través de la tabla de metadatos information_schema. Puede ser visto que la partición p0 / p1 tiene 3 filas, p2 / p3 La partición distribuye 2 filas.

Variante LINEAR

    La partición HASH admite variantes lineales, es decir, partición hash lineal. A diferencia de los hash regulares, el hash lineal utiliza un algoritmo de potencia de dos lineal para calcular las claves hash. Con respecto al algoritmo de potencia de dos, el autor discutirá el siguiente algoritmo según corresponda, y creará la declaración de la tabla de partición hash de línea de la siguiente manera (asumiendo lineal antes de la palabra clave hash):

 create table hash_linear_par1 (id int(3) not null) partition by linear hash(id) partitions 4;

partición clave

         La partición de clave es similar a la partición hash, pero la partición HASH solo admite enteros, y la partición KEY admite otros tipos, excepto BLOB y Texto como claves de partición.

Declaración de construcción de mesa

create table key_par1 (name varchar(11)) partition by key(name) partitions 4;

Variante LINEAR

    La variante lineal de la partición clave es similar a la partición hash, omitida aquí;

Subpartición

         Las tablas de tipo RANGE y LIST se pueden subdividir aún más. La subpartición puede ser hash o clave de forma similar. como sigue:

Declaración de construcción de mesa

CREATE TABLE sub_test (id INT, id2 INT)
PARTITION BY RANGE( id )
SUBPARTITION BY HASH( id2 )
SUBPARTITIONS 2 (
   PARTITION p0 VALUES LESS THAN (1990),
   PARTITION p1 VALUES LESS THAN (2000),
   PARTITION p2 VALUES LESS THAN MAXVALUE
    );

         Como arriba, primero particione el rango en 3 particiones por id, y luego particione la partición con la columna id2 y luego particione el sub-hash, de modo que toda la tabla forme seis particiones.

para resumir

         Como se mencionó anteriormente, MySQL admite cuatro tipos de partición: rango, lista, hash y clave. Cada tipo de partición admite diferentes variantes. Entre ellas, las particiones de rango y lista también admiten subparticiones, lo que es extremadamente flexible.

En general, la importancia de la partición radica en la división artificial de las tablas en varias partes, que se utilizan para el almacenamiento de tablas dispersas y agilizan la consulta de tablas grandes, lo cual es muy útil cuando hay demasiados registros de tablas. El archivo de espacio de tabla formado después de que la declaración de prueba anterior crea la tabla se enumera a continuación, es decir, un archivo para cada partición. Las publicaciones de blog posteriores continuarán dividiendo las operaciones de la tabla de particiones, incluida la designación de diferentes particiones en diferentes rutas (para reducir el riesgo de falla del disco), la modificación / fusión de las particiones de la tabla, etc.

Gracias.

Supongo que te gusta

Origin blog.csdn.net/zhaogang1993/article/details/99232896
Recomendado
Clasificación