Recherche…


Remarques

  • Partitionnement RANGE Ce type de partitionnement affecte des lignes aux partitions en fonction des valeurs de colonne comprises dans une plage donnée.

  • LIST partitionnement . Semblable au partitionnement par RANGE, sauf que la partition est sélectionnée en fonction de colonnes correspondant à un ensemble de valeurs discrètes.

  • Partitionnement HASH . Avec ce type de partitionnement, une partition est sélectionnée en fonction de la valeur renvoyée par une expression définie par l'utilisateur qui opère sur les valeurs de colonne dans les lignes à insérer dans la table. La fonction peut être constituée de toute expression valide dans MySQL qui donne une valeur entière non négative. Une extension de ce type, LINEAR HASH , est également disponible.

  • Partitionnement KEY . Ce type de partitionnement est similaire au partitionnement par HASH, sauf que seules une ou plusieurs colonnes à évaluer sont fournies et que le serveur MySQL fournit sa propre fonction de hachage. Ces colonnes peuvent contenir des valeurs autres que des valeurs entières, car la fonction de hachage fournie par MySQL garantit un résultat entier quel que soit le type de données de la colonne. Une extension à ce type, LINEAR KEY , est également disponible.

Partitionnement RANGE

Une table partitionnée par plage est partitionnée de telle sorte que chaque partition contient des lignes pour lesquelles la valeur de l'expression de partitionnement se situe dans une plage donnée. Les plages doivent être contiguës mais ne se chevauchent pas et sont définies à l'aide de l'opérateur VALUES LESS THAN . Pour les exemples suivants, supposez que vous créez un tableau tel que celui-ci pour contenir les dossiers du personnel pour une chaîne de 20 magasins de vidéos, numérotés de 1 à 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
);

Ce tableau peut être partitionné par plage de différentes manières, en fonction de vos besoins. Une façon serait d'utiliser la colonne store_id . Par exemple, vous pouvez décider de partitionner la table en ajoutant une clause PARTITION BY RANGE , comme indiqué ici:

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 représente une valeur entière qui est toujours supérieure à la plus grande valeur entière possible (en langage mathématique, elle sert de limite inférieure).

basé sur le document officiel MySQL .

Partitionnement LIST

Le partitionnement de liste est similaire au partitionnement à plusieurs niveaux. Comme dans le partitionnement par RANGE, chaque partition doit être explicitement définie. La principale différence entre les deux types de partitionnement réside dans le fait que, dans le partitionnement de liste, chaque partition est définie et sélectionnée en fonction de l'appartenance d'une valeur de colonne dans un ensemble de listes de valeurs plutôt que dans un ensemble de plages contiguës. valeurs. Ceci est fait en utilisant PARTITION BY LIST(expr)expr est une valeur de colonne ou une expression basée sur une valeur de colonne et renvoyant une valeur entière, puis définissant chaque partition au moyen d'une VALUES IN (value_list) , où value_list est liste d'entiers séparés par des virgules.

Pour les exemples suivants, nous supposons que la définition de base de la table à partitionner est fournie par l'instruction CREATE TABLE présentée ici:

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
);

Supposons qu'il y ait 20 magasins de vidéos répartis sur 4 franchises, comme le montre le tableau suivant.

Région Numéros d'identification de magasin
Nord 3, 5, 6, 9, 17
est 1, 2, 10, 11, 19, 20
Ouest 4, 12, 13, 14, 18
Central 7, 8, 15, 16

Pour partitionner cette table de manière à ce que les lignes des magasins appartenant à la même région soient stockées dans la même partition

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)
);

basé sur le document officiel MySQL .

Partitionnement HASH

Le partitionnement par HASH est principalement utilisé pour assurer une distribution uniforme des données parmi un nombre prédéterminé de partitions. Avec le partitionnement par plage ou par liste, vous devez spécifier explicitement dans quelle partition une valeur de colonne donnée ou un ensemble de valeurs de colonne doit être stocké; Avec le partitionnement par hachage, MySQL s'en charge pour vous et vous devez uniquement spécifier une valeur ou une expression de colonne basée sur une valeur de colonne à hacher et le nombre de partitions dans lesquelles la table partitionnée doit être divisée.

L'instruction suivante crée une table qui utilise le hachage sur la colonne store_id et est divisée en 4 partitions:

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 vous n'incluez pas de clause PARTITIONS , le nombre de partitions par défaut est 1.

basé sur le document officiel MySQL .



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow