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.
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.
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`;
SELECT PARTITION_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA='test' AND TABLE_NAME = 'log';+----------------+------------+| 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'objetExplication sur PHP générant un contenu de classe RequestID uniqueCapacité des tables de base de données MySQL ViewCe 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!