Maison  >  Article  >  base de données  >  Explication détaillée des méthodes liées à MySQL pour reconstruire les partitions de table et conserver les données

Explication détaillée des méthodes liées à MySQL pour reconstruire les partitions de table et conserver les données

jacklove
jackloveoriginal
2018-06-08 15:15:372687parcourir

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 de tables partitionnées et de tables sans partitions, mais si vous souhaitez repartitionner la table, supprimer la partition et reconstruire supprimera les données, ce n'est donc pas possible. L'opération directe nécessite une implémentation de traitement spéciale.

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 explique les méthodes pertinentes de MySQL pour reconstruire les partitions de table et conserver les données. Pour plus de connaissances connexes, veuillez prêter attention au site Web PHP chinois.

Recommandations associées :

Explication sur php json_encode ne prenant pas en charge les attributs privés d'objet

Explication sur PHP générant un contenu de classe RequestID unique


Capacité des tables de base de données MySQL View

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