Maison > base de données > tutoriel mysql > le corps du texte

Mysql quatre méthodes de partitionnement et comment implémenter un partitionnement combiné

WBOY
Libérer: 2023-05-26 17:55:29
avant
1808 Les gens l'ont consulté

1. Questions

1. Qu'est-ce que le partitionnement ? L'efficacité des requêtes d'index

2. analyse des données

puis effectuez l'optimisation de l'index

#🎜🎜 #Ensuite, introduisez le partitionnement

3. Principe de partitionnement dans Mysql

Client-. --------> Comparer l'ID et la clé de partition ----- ----> Rechercher la partition spécifiée---------> Identique à la base de données query

4.Limitations des partitions dans Mysql

#🎜🎜 #Les champs de partition doivent être utilisés, sinon la requête de partition échouera. Parcourez toutes les zones.

Actuellement, Range est une partition de plage, mais parfois nous le découvrirons. La taille de la partition est toujours statique.

Il y aura donc une taille inégale de la table de partition. Comment équilibrer la taille de la table de partition ?

2. Implémentation de la partition

1. Partition de plage

Conditions

Produit -Table de partition

Steps

    1. Créez d'abord une gamme de partitions de produits
  • CREATE TABLE `product-Partiton-Range` (
    	`Id` BIGINT(8) NOT NULL,
    	`ProductName` CHAR(245) NOT NULL DEFAULT '1',
    	`ProductId` CHAR(255) NOT NULL DEFAULT '1',
    	`ProductDescription` CHAR(255) NOT NULL DEFAULT '1',
    	`ProductUrl` CHAR(255) NOT NULL DEFAULT '1',
    	PRIMARY KEY (`Id`),
    	INDEX `ProductId` (`ProductId`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
    PARTITION BY RANGE (Id) PARTITIONS 3 (
    PARTITION part0 VALUES LESS THAN (12980), 
    PARTITION part1 VALUES LESS THAN (25960), 
    PARTITION part2 VALUES LESS THAN MAXVALUE);
    Copier après la connexion

    2. table de partition

    select * from product-Partiton-Range where Id = 25000
    Copier après la connexion
  • 2. Partition de hachage

Étapes

1. Créez d'abord Product-Partiton-Hash

CREATE TABLE `product-Partiton-Hash` (
    `Id` BIGINT(8) NOT NULL,
    `ProductName` CHAR(245) NOT NULL DEFAULT '1',
    `ProductId` CHAR(255) NOT NULL DEFAULT '1',
    `ProductDescription` CHAR(255) NOT NULL DEFAULT '1',
    `ProductUrl` CHAR(255) NOT NULL DEFAULT '1',
    PRIMARY KEY (`Id`),
    INDEX `ProductId` (`ProductId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY HASH (Id) PARTITIONS 3;
Copier après la connexion
#🎜🎜 #. Le partitionnement par hachage ne peut être partitionné que par des champs numériques, mais ne peut pas être partitionné par des champs de caractères. Si vous devez partitionner les valeurs des champs.

doit être inclus dans le champ de la clé primaire.

3.Partition de clé

Étapes

1. Créez d'abord la clé de partition de produit

CREATE TABLE `product-Partiton-Key` (
	`Id` BIGINT(8) NOT NULL,
	`ProductName` CHAR(245) NOT NULL DEFAULT '1',
	`ProductId` CHAR(255) NOT NULL DEFAULT '1',
	`ProductDescription` CHAR(255) NOT NULL DEFAULT '1',
	`ProductUrl` CHAR(255) NOT NULL DEFAULT '1',
	PRIMARY KEY (`Id`),
	INDEX `ProductId` (`ProductId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY KEY (ProductName) PARTITIONS 3;

#建立复合主键
CREATE TABLE `product-Partiton-Key` (
	`Id` BIGINT(8) NOT NULL,
	`ProductName` CHAR(245) NOT NULL DEFAULT '1',
	`ProductId` CHAR(255) NOT NULL DEFAULT '1',
	`ProductDescription` CHAR(255) NOT NULL DEFAULT '1',
	`ProductUrl` CHAR(255) NOT NULL DEFAULT '1',
	PRIMARY KEY (`Id`),
	INDEX `ProductId` (`ProductId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY KEY (ProductName) PARTITIONS 3;
Copier après la connexion

Tous les ci-dessus partitions Est une caractéristique : toutes les partitions doivent être des partitions contiguës et de dimensions contiguës.

Regardons un autre scénario : comment partitionner les commandes de produits.

4. Comment implémenter la partition de liste dans Mysql

Steps

1. Créez d'abord une liste de partitions de produits

CREATE TABLE `product-Partiton-List` (
    `Id` BIGINT(8) NOT NULL,
    `ProductName` CHAR(245) NOT NULL DEFAULT '1',
    `ProductId` CHAR(255) NOT NULL DEFAULT '1',
    `ProductDescription` CHAR(255) NOT NULL DEFAULT '1',
    `ProductUrl` CHAR(255) NOT NULL DEFAULT '1',
    `ProductStatus` int NOT NULL DEFAULT 0,
    PRIMARY KEY (`Id`),
    INDEX `ProductId` (`ProductId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY LIST(ProductId) (
    PARTITION a VALUES IN (1,5,6),
    PARTITION b VALUES IN (2,7,8)
);
Copier après la connexion
#🎜. 🎜 #Partition par clé primaire du produit et nom du produit.

5. Comment implémenter des partitions combinées dans Mysql

Steps

CREATE TABLE `product-Partiton-flex` (
    `Id` BIGINT(8) NOT NULL,
    `ProductName` CHAR(245) NOT NULL DEFAULT '1',
    `ProductId` CHAR(255) NOT NULL DEFAULT '1',
    `ProductDescription` CHAR(255) NOT NULL DEFAULT '1',
    `ProductUrl` CHAR(255) NOT NULL DEFAULT '1',
    PRIMARY KEY (`Id`,`ProductName`),
    INDEX `ProductId` (`ProductId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY RANGE (Id) PARTITIONS 3
SUBPARTITION BY KEY(ProductName)
  SUBPARTITIONS 2 (
    PARTITION p0 VALUES LESS THAN (12980),
    PARTITION p1 VALUES LESS THAN (25960),
    PARTITION p2 VALUES LESS THAN MAXVALUE
);
Copier après la connexion

3. #1. Supprimer la partition

ALERT TABLE users DROP PARTITION p0; 
#删除分区 p0
Copier après la connexion

2. Reconstruire la partition

2.1Reconstruction de la partition RANGE

ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES LESS THAN (6000000));  
#将原来的 p0,p1 分区合并起来,放到新的 p0 分区中。
Copier après la connexion

2.2 Reconstruction de la partition LISTE

ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES IN(0,1,4,5,8,9,12,13));
#将原来的 p0,p1 分区合并起来,放到新的 p0 分区中。
Copier après la connexion
#🎜 🎜#2.3 Reconstruction de la partition HASH/KEY

ALTER TABLE users REORGANIZE PARTITION COALESCE PARTITION 2; 
#用 REORGANIZE 方式重建分区的数量变成2,在这里数量只能减少不能增加。想要增加可以用 ADD PARTITION 方法。
Copier après la connexion

3. Ajouter une nouvelle partition

3.1 Ajouter une nouvelle partition RANGE

#新增一个RANGE分区
ALTER TABLE category ADD PARTITION (PARTITION p4 VALUES IN (16,17,18,19)
            DATA DIRECTORY = '/data8/data'
            INDEX DIRECTORY = '/data9/idx');
Copier après la connexion

3.2 Ajouter une nouvelle partition HASH/KEY partition#🎜 🎜#
ALTER TABLE users ADD PARTITION PARTITIONS 8;   #将分区总数扩展到8个。
Copier après la connexion

3.3 Ajouter des partitions aux tables existantes

alter table results partition by RANGE (month(ttime)) 
(
PARTITION p0 VALUES LESS THAN (1),
PARTITION p1 VALUES LESS THAN (2) , 
PARTITION p2 VALUES LESS THAN (3) ,
PARTITION p3 VALUES LESS THAN (4) , 
PARTITION p4 VALUES LESS THAN (5) ,
PARTITION p5 VALUES LESS THAN (6) , 
PARTITION p6 VALUES LESS THAN (7) ,
PARTITION p7 VALUES LESS THAN (8) , 
PARTITION p8 VALUES LESS THAN (9) ,
PARTITION p9 VALUES LESS THAN (10) , 
PARTITION p10 VALUES LESS THAN (11),
PARTITION p11 VALUES LESS THAN (12),
PARTITION P12 VALUES LESS THAN (13) 
);
Copier après la connexion
4 La restriction de partition par défaut est que le champ de partition doit faire partie de la clé primaire (PRIMARY KEY), supprimez-la. restriction
# 🎜🎜#[Méthode 1] Utilisez l'ID :
mysql> ALTER TABLE np_pk
    ->     PARTITION BY HASH( TO_DAYS(added) )
    ->     PARTITIONS 4;
#ERROR 1503 (HY000): A PRIMARY KEY must include all columns in the table's partitioning function
mysql> ALTER TABLE np_pk
    ->     PARTITION BY HASH(id)
    ->     PARTITIONS 4;
Query OK, 0 rows affected (0.11 sec)
Records: 0 Duplicates: 0 Warnings: 0
Copier après la connexion
[Méthode 2] Supprimez le PK d'origine pour générer un nouveau PK
mysql> alter table results drop PRIMARY KEY;
Query OK, 5374850 rows affected (7 min 4.05 sec)
Records: 5374850 Duplicates: 0 Warnings: 0

mysql> alter table results add PRIMARY KEY(id, ttime);
Query OK, 5374850 rows affected (7 min 4.05 sec)
Records: 5374850 Duplicates: 0 Warnings: 0
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal