Dieser Artikel stellt die Methode von MySQL vor, Tabellenpartitionen neu zu erstellen und Daten beizubehalten. (Partition) kann die Datensätze einer Tabelle zur Speicherung in mehrere Bereiche aufteilen Die Partitionssuche erfordert nicht die gesamte Tabellenabfrage, wodurch die Abfrageeffizienz verbessert wird.
Es gibt keinen großen Unterschied zwischen der Verwendung von Tabellen mit Partitionen und Tabellen ohne Partitionen, aber wenn Sie die Tabelle neu partitionieren möchten, durch das Löschen der Partition und die Neuerstellung werden die Daten gelöscht Daher ist eine direkte Operation nicht möglich und erfordert die Verwendung einer speziellen Verarbeitungsimplementierung.
1. Erstellen Sie eine neue Tabelle und eine neue Partition mit derselben Struktur wie die ursprüngliche Tabelle.
2. Kopieren Sie die Daten in der Originaltabelle in die neue Tabelle.
3. Löschen Sie die Originaltabelle.
4. Ändern Sie den neuen Tabellennamen in den ursprünglichen Tabellennamen.
Die ursprüngliche Struktur der Protokolltabelle ist wie folgt, unterteilt nach ID.
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'));
Datenpartitionsverteilung anzeigen
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 | +----------------+------------+
Protokolldaten müssen zeitbasiert durchsucht werden, daher ist es notwendig, Partitionen basierend auf der Protokollzeit neu zu erstellen.
1. Protokoll2 erstellen, Partition nach Zeit (1 Partition pro Monat)
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. Kopieren Sie die Protokolldaten nach Protokoll2
insert into `log2` select * from `log`;
3. Löschen Sie die Protokolltabelle
drop table `log`;
4. Benennen Sie die log2-Tabelle um in log
rename table `log2` to `log`;
Überprüfen Sie die Datenpartitionsverteilung nach der Ausführung
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 | +----------------+------------+
Sie können sehen, dass die Daten in der Protokolltabelle in neuen Partitionen gespeichert wurden.
In diesem Artikel werden die relevanten Methoden von MySQL zum Neuerstellen von Tabellenpartitionen und zum Aufbewahren von Daten erläutert. Weitere Informationen zu diesem Thema finden Sie auf der chinesischen PHP-Website.
Verwandte Empfehlungen:
Erklärung, dass PHP json_encode keine privaten Objektattribute unterstützt
Erklärung, dass PHP eindeutigen RequestID-Klasseninhalt generiert
MySQL View-Datenbanktabellenkapazität
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der MySQL-bezogenen Methoden zum Neuerstellen von Tabellenpartitionen und zum Beibehalten von Daten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!