Heim  >  Artikel  >  Datenbank  >  Ausführliche Erläuterung der MySQL-bezogenen Methoden zum Neuerstellen von Tabellenpartitionen und zum Beibehalten von Daten

Ausführliche Erläuterung der MySQL-bezogenen Methoden zum Neuerstellen von Tabellenpartitionen und zum Beibehalten von Daten

jacklove
jackloveOriginal
2018-06-08 15:15:372686Durchsuche

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.

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, 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!

Stellungnahme:
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