Heim > Backend-Entwicklung > PHP-Tutorial > Einführung in die Methode von MySQL, Tabellenpartitionen neu zu erstellen und Daten beizubehalten

Einführung in die Methode von MySQL, Tabellenpartitionen neu zu erstellen und Daten beizubehalten

jacklove
Freigeben: 2023-04-01 12:04:02
Original
2838 Leute haben es durchsucht

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 bei der Verwendung von partitionierten Tabellen und nicht-partitionierten Tabellen, aber wenn Sie die Tabelle neu partitionieren möchten, durch das Löschen der Partition und den Neuaufbau werden die Daten gelöscht, also Kann nicht direkt bedient werden. Es ist eine spezielle Verarbeitungsimplementierung erforderlich.

MySQL-Methode zum Neuerstellen von Tabellenpartitionen und Beibehalten von Daten:

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.

Beispiel:

Die ursprüngliche Struktur der Protokolltabelle ist wie folgt, partitioniert 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'));
Nach dem Login kopieren

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 |
+----------------+------------+
Nach dem Login kopieren


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) */;
Nach dem Login kopieren


2. Kopieren Sie die Protokolldaten nach Protokoll2

insert into `log2` select * from `log`;
Nach dem Login kopieren


3. Löschen Sie die Protokolltabelle

drop table `log`;
Nach dem Login kopieren


4. Benennen Sie die log2-Tabelle um in log

rename table `log2` to `log`;
Nach dem Login kopieren


Ü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 |
+----------------+------------+
Nach dem Login kopieren

Sie können sehen, dass die Daten in der Protokolltabelle in neuen Partitionen gespeichert wurden.

In diesem Artikel wird die Methode zum Neuerstellen von Tabellenpartitionen und zum Speichern von Daten vorgestellt. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

php json_encode unterstützt die Lösung zum Objekt privater Attribute nicht

PHP generiert eine eindeutige RequestID-Klasse Verwandte Inhalte

js grundlegende Datentypen und Konvertierungsoperatoren

Das obige ist der detaillierte Inhalt vonEinführung in die Methode von MySQL, Tabellenpartitionen neu zu erstellen und Daten beizubehalten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage