Maison >base de données >tutoriel mysql >MySQL Advanced 15 - Partitionnement de tables
1. Pourquoi utiliser le partitionnement ?
Lorsque la quantité de données est trop importante (généralement des millions ou des dizaines de millions de données), il est nécessaire de diviser les données d'une table en plusieurs tables pour le stockage. Certaines requêtes peuvent être grandement optimisées, principalement parce que les données qui satisfont une instruction WHERE donnée peuvent être stockées dans une ou plusieurs partitions uniquement, de sorte que la recherche n'a pas besoin de rechercher d'autres partitions restantes.
2. Vérifiez si MySQL prend en charge le partitionnement
Utilisez la commande suivante pour vérifier si MySQL prend en charge le partitionnement ? ?
show variables like '%partition%';
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 ) 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 (21) );
Dans cet exemple, toutes les lignes liées aux employés du magasin seront enregistrées dans la partition p0, et toutes les lignes liées au personnel de bureau et de support seront enregistrées dans la partition. p1, toutes les lignes liées à la couche de gestion sont enregistrées dans la partition p2.
Afficher les partitions
show create table employees;
Le partitionnement LISTE est obtenu en utilisant "PARTITION BY LIST(expr)", où "expr" est une certaine valeur de colonne ou un entier basé sur une certaine valeur de colonne, et renvoie une expression de valeur entière, puis définit chaque partition par "VALUES IN (value_list)", où "value_list" est une liste d'entiers séparés par des virgules.
create table category_part( cid int unsigned not null auto_increment,cname varchar(64) not null,parent_id int not null,primary key (cid,parent_id)) partition by list(parent_id)( partition p1 values in (1,2,3,6,9), partition p2 values in (4,5,10,22,23), partition p3 values in (7,8,11,12,13), partition p4 values in (14,15,16,17,20), partition p5 values in (18,19,21,24,25) );
5. Partitionnement HASH
Le but du partitionnement par hachage est de répartir uniformément les données dans des partitions prédéfinies pour garantir que chaque partition La quantité de données c'est à peu près le même. Dans les partitions RANGE et LIST, vous devez spécifier explicitement dans quelle partition une valeur de colonne donnée ou un ensemble de valeurs de colonne doit être enregistrée ; dans le partitionnement HASH, MYSQL effectue automatiquement ces tâches, et tout ce que l'utilisateur a à faire est basé sur les données. à hacher. La valeur de colonne spécifie une valeur ou une expression de colonne et spécifie le nombre de partitions dans lesquelles la table partitionnée sera divisée.
Pour utiliser le partitionnement HAHS pour diviser une table, ajoutez une clause PARTITION BY HASH (expr) à l'instruction CREATE TABLE, où "expr" est une expression qui renvoie un entier. expr peut simplement être un nom de colonne dont le type de champ est entier. De plus, l'utilisateur devra probablement ajouter ultérieurement une clause PARTITITIONS num, où num est un entier non négatif, qui représente le nombre de partitions à diviser. Si une clause PARTITIONS n'est pas incluse, le nombre de partitions est par défaut de 1.
create table t_hash ( a int, b datetime) partition by hash (YEAR(b)) partitions 4;
L'avantage du partitionnement LINEAR HASH est que l'ajout, la suppression, la fusion et le fractionnement de partitions deviendront plus rapides, ce qui est bénéfique pour le traitement. de grandes quantités de données. L'inconvénient est que par rapport à la répartition des données obtenue en utilisant le partitionnement HASH, la répartition des données entre chaque partition peut ne pas être équilibrée.
6. Partition de clés
create table orders_key ( id int auto_increment, customer_surname varchar(30), store_id int, alesperson_id int, order_Date date, note varcahr(500), index_idx(id) ) engine=myisam partition by key(order_date) partitions 4;
Cette partition est similaire à la partition de hachage, sauf que le serveur MySQL utilise sa propre expression de hachage, contrairement à d'autres types de partitions, elle ne nécessite pas son utilisation. d'une expression int ou nulle.
Ce qui précède est le contenu de MySQL Advanced Fifteen - Table Partitioning. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !