Le partitionnement RANGE COLUMNS étend le partitionnement RANGE standard avec deux fonctionnalités clés : la prise en charge de plusieurs colonnes de partition et des types de données non entiers, notamment les chaînes de caractères, DATE et DATETIME. Utilisez-le lorsque le partitionnement RANGE, limité aux entiers ou à une seule colonne, ne répond pas à vos besoins de distribution des données.
Pour une comparaison complète, consultez la vue d'ensemble des types de partitionnement.
Syntaxe
CREATE TABLE ...
PARTITION BY RANGE COLUMNS (partition_column_list) [PARTITIONS number]
(
PARTITION part_name VALUES LESS THAN (range_bound_value_list),
PARTITION part_name VALUES LESS THAN (range_bound_value_list),
...
)
partition_column_list:
partition_column[, partition_column, ...]
range_bound_value_list:
range_bound_value[, range_bound_value, ...]
Les limites de partition doivent être strictement croissantes. Spécifiez MAXVALUE comme borne supérieure de la dernière partition pour inclure toutes les lignes restantes.
Types de données pris en charge
| Catégorie de type | Types pris en charge |
|---|---|
| Types entiers | BIGINT, BIGINT UNSIGNED, INT, INT UNSIGNED, MEDIUMINT, MEDIUMINT UNSIGNED, SMALLINT, SMALLINT UNSIGNED, TINYINT, TINYINT UNSIGNED |
| Types date et heure | DATETIME, DATE |
| Types chaîne | CHAR, VARCHAR |
| Type à virgule fixe | DECIMAL (le nombre de décimales doit être égal à 0) |
Limites
| Limite | Valeur par défaut |
|---|---|
| Fonctions de partitionnement | Non prises en charge — spécifiez directement les noms de colonnes |
| Nombre maximal de partitions par table | 8 192 |
| Nombre maximal de colonnes par clé de partition | 5 |
| Longueur maximale du nom de partition | 16 caractères (doit être unique) |
Exemples
Partitionnement par clé composite (date et ID)
Partitionnez les enregistrements selon une clé composite composée de birthday et id afin de créer des plages annuelles comportant chacune un sous-intervalle basé sur l'ID :
CREATE TABLE tb_rc(
id BIGINT NOT NULL AUTO_INCREMENT,
bid INT,
name VARCHAR(30),
birthday DATETIME NOT NULL,
PRIMARY KEY(id)
)
PARTITION BY RANGE COLUMNS(birthday, id)
(
PARTITION p1 VALUES LESS THAN('2020-01-01', 1000),
PARTITION p2 VALUES LESS THAN('2021-01-01', 2000),
PARTITION p3 VALUES LESS THAN('2022-01-01', 3000),
PARTITION pm VALUES LESS THAN(MAXVALUE, MAXVALUE)
);
La dernière partition pm utilise MAXVALUE pour les deux colonnes, ce qui permet d'inclure toutes les lignes ne correspondant pas aux bornes précédentes.