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.
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 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ésPHP génère une classe RequestID unique Contenu associéTypes de données de base js et opérateurs de conversionCe 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!