Maison  >  Article  >  développement back-end  >  Présentation de la méthode MySQL pour reconstruire la partition de table et conserver les données

Présentation de la méthode MySQL pour reconstruire la partition de table et conserver les données

jacklove
jackloveoriginal
2018-06-15 17:15:002784parcourir

Cet article présente la méthode de MySQL pour reconstruire les partitions de table et conserver les données. La partition de table de MySQL (partition) peut séparer les enregistrements d'une table en plusieurs zones pour le stockage. stocké dans les zones correspondantes selon les conditions de requête. La recherche de partition ne nécessite pas l'intégralité de la requête de table, ce qui améliore l'efficacité de la requête.

Il n'y a pas beaucoup de différence dans l'utilisation des tables partitionnées et des tables non partitionnées, mais si vous souhaitez repartitionner la table, supprimer la partition et reconstruire supprimera les données, donc ne peut pas être utilisé directement, une mise en œuvre de traitement spéciale est requise.

Méthode MySQL pour reconstruire les partitions de table et conserver les données :

1. Créez une nouvelle table et une nouvelle partition avec la même structure que la table d'origine.
2. Copiez les données de la table d'origine dans la nouvelle table.
3. Supprimez le tableau d'origine.
4. Remplacez le nouveau nom de la table par le nom de la table d'origine.

Exemple :

La structure originale de la table de journalisation est la suivante, partitionnée par identifiant.

CREATE DATABASE `test`;use `test`;CREATE TABLE `log` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `content` text NOT NULL COMMENT '内容', `status` tinyint(3) unsigned NOT NULL COMMENT '记录状态', `addtime` int(11) unsigned NOT NULL COMMENT '添加时间', `lastmodify` int(11) unsigned NOT NULL COMMENT '最后修改时间', PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (id)
(PARTITION p10w VALUES LESS THAN (100000) ENGINE = InnoDB,
PARTITION p20w VALUES LESS THAN (200000) ENGINE = InnoDB,
PARTITION p50w VALUES LESS THAN (500000) ENGINE = InnoDB,
PARTITION p100w VALUES LESS THAN (1000000) ENGINE = InnoDB,
PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */;insert into `log`(content,status,addtime,lastmodify) 
values('content1',1, unix_timestamp('2018-01-11 00:00:00'), unix_timestamp('2018-01-11 00:00:00')),
('content2',1, unix_timestamp('2018-02-22 00:00:00'), unix_timestamp('2018-02-22 00:00:00')),
('content3',1, unix_timestamp('2018-03-31 00:00:00'), unix_timestamp('2018-03-31 00:00:00'));

Afficher la distribution des partitions de données

SELECT PARTITION_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA='test' AND TABLE_NAME = 'log';+----------------+------------+| PARTITION_NAME | TABLE_ROWS |
+----------------+------------+| p10w           |          3 |
| p20w           |          0 |
| p50w           |          0 |
| p100w          |          0 || pmax           |          0 |
+----------------+------------+


Les données du journal doivent être recherchées par heure, il est donc nécessaire de reconstruire les partitions par heure de journal .

1. Créez log2, partitionnez par heure (1 partition par mois)

CREATE TABLE `log2` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `content` text NOT NULL COMMENT '内容', `status` tinyint(3) unsigned NOT NULL COMMENT '记录状态', `addtime` int(11) unsigned NOT NULL COMMENT '添加时间', `lastmodify` int(11) unsigned NOT NULL COMMENT '最后修改时间', PRIMARY KEY (`id`,`addtime`), KEY `id`(`id`), KEY `addtime`(`addtime`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (addtime)
(PARTITION p201801 VALUES LESS THAN (unix_timestamp('2018-02-01 00:00:00')) ENGINE = InnoDB,
PARTITION p201802 VALUES LESS THAN (unix_timestamp('2018-03-01 00:00:00')) ENGINE = InnoDB,
PARTITION p201803 VALUES LESS THAN (unix_timestamp('2018-04-01 00:00:00')) ENGINE = InnoDB,
PARTITION p201804 VALUES LESS THAN (unix_timestamp('2018-05-01 00:00:00')) ENGINE = InnoDB,
PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */;


2. Copiez les données du journal dans log2<.>

insert into `log2` select * from `log`;


3. Supprimez la table log2

drop table `log`;


4. 🎜>

rename table `log2` to `log`;
Vérifiez la répartition des partitions de données après l'exécution


Vous pouvez voir que les données de la table de journal ont été stockées dans de nouvelles partitions.
SELECT PARTITION_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA=&#39;test&#39; AND TABLE_NAME = &#39;log&#39;;+----------------+------------+| PARTITION_NAME | TABLE_ROWS |
+----------------+------------+| p201801        |          1 |
| p201802        |          1 |
| p201803        |          1 |
| p201804        |          0 || pmax           |          0 |
+----------------+------------+

Cet article présente la méthode de reconstruction des partitions de table MySQL et de conservation des données. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois.

Recommandations associées :

php json_encode ne prend pas en charge la solution pour objecter les attributs privés


PHP génère une classe RequestID unique Contenu associé

Types de données de base js et opérateurs de conversion

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!

Déclaration:
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