Heim  >  Artikel  >  php教程  >  MySQL LIST-Partition

MySQL LIST-Partition

高洛峰
高洛峰Original
2016-11-05 10:52:231579Durchsuche

LIST-Partition und RANGE-Partition sind sehr ähnlich. Der Hauptunterschied besteht darin, dass LIST eine Sammlung von Aufzählungswertlisten und RANGE eine Sammlung kontinuierlicher Intervallwerte ist. Die beiden sind in der Syntax sehr ähnlich. Es wird außerdem empfohlen, dass die LIST-Partitionsspalte eine Nicht-Null-Spalte ist. Andernfalls schlägt das Einfügen eines Nullwerts fehl, wenn in der Aufzählungsliste kein Nullwert vorhanden ist. Dies unterscheidet sich von anderen Partitionen Der Mindestpartitionswert wird zur Speicherung in 0 unterteilt. Die Hauptpartition LIST unterstützt nur Ganzzahlfelder, und nach Version 5.5 können Sie die LIST COLUMN verwenden Partition zur Unterstützung nicht ganzzahliger Felder ohne Funktionskonvertierung. Eine ausführliche Erklärung finden Sie in der COLUMN-Partition.

1. Partitionen erstellen

Die aufgezählten Werte jeder Partition in der Liste müssen nur unterschiedlich sein und es gibt keine feste Reihenfolge.

CREATE TABLE tblist (
    id INT NOT NULL,
    store_id INT
)
PARTITION BY LIST(store_id) (
    PARTITION a VALUES IN (1,5,6),
    PARTITION b VALUES IN (2,7,8),
    PARTITION c VALUES IN (3,9,10),
    PARTITION d VALUES IN (4,11,12)
);
SELECT PARTITION_NAME,PARTITION_METHOD,PARTITION_EXPRESSION,PARTITION_DESCRIPTION,TABLE_ROWS,SUBPARTITION_NAME,SUBPARTITION_METHOD,SUBPARTITION_EXPRESSION 
FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME='tblist';

MySQL LIST-Partition

1. Daten einfügen

insert into tblist(id,store_id) values(1,1),(7,7);

Fügen Sie jeweils einen Datensatz in die beiden Partitionen a und b ein

MySQL LIST-Partition

2. Fügen Sie einen Wert ein, der nicht in der Liste enthalten ist

MySQL LIST-Partition

Beim Einfügen eines Werts, der nicht in der Aufzählung enthalten ist Liste in eine Partition, das Einfügen schlägt fehl, und das Einfügen eines Nullwerts schlägt auch fehl, wenn der Nullwert nicht in der Aufzählungsliste enthalten ist

2. Partitionsverwaltung

1. Eine Partition hinzufügen

ALTER TABLE tblist ADD PARTITION (PARTITION e VALUES IN (20));

Hinweis: Fügt keine Partition hinzu, die einen vorhandenen Wert enthält.

2. Partitionen zusammenführen

ALTER TABLE tblist REORGANIZE PARTITION  a,b INTO (PARTITION m VALUES IN (1,5,6,2,7,8));

Partitionen a und b in Partition m zusammenführen

Hinweis: Wie bei der RANGE-Partition können nur mehrere benachbarte Partitionen zusammengeführt werden, nicht jedoch über Partitionen hinweg zusammengeführt. Sie können beispielsweise nicht zwei Partitionen a und c zusammenführen. Sie können nur a, b, c zusammenführen

MySQL LIST-Partition

3 Teilen Sie die Partition

ALTER TABLE tblist REORGANIZE PARTITION  a,b,c INTO 
(PARTITION n VALUES IN (1,5,6,3,9,10),
PARTITION m VALUES IN (2,7,8));

ALTER TABLE tblist REORGANIZE PARTITION  n INTO 
    ( PARTITION a VALUES IN (1,5,6),
    PARTITION b VALUES IN (3,9,10));

MySQL LIST-Partition

Nach zwei Aufteilungsrunden wurde die Aufzählungsliste (3,9,10) vor (2,7,8) eingestuft; tatsächlich ist es so: Am Anfang , abc wurde in nm zusammengeführt. Da der Aufzählungswert in n kleiner als m ist, wird die geteilte Partition vor der m-Partition platziert Partition a ist Der Wert ist kleiner als der Wert der Partition b, sodass a vor b eingestuft wird.

Hinweis: 1. Bei Tests in Version 5.7.12 wurde festgestellt, dass der durch das Zusammenführen und Teilen von Partitionen neu definierte Aufzählungswert möglicherweise nicht der ursprüngliche Wert ist. Wenn der ursprüngliche Aufzählungswert Daten enthält und neu zusammengeführt oder aufgeteilt wird Der Partitionsaufzählungswert enthält nicht den ursprünglichen Aufzählungswert, was zu Datenverlust führt. Obwohl ich nicht weiß, warum MySQL dieses Verhalten nicht verbietet, wird künstlich verlangt, dass der Aufzählungswert der Partition unabhängig davon, ob sie zusammengeführt oder geteilt wird, unverändert bleibt oder nur erhöht, aber nicht verringert werden kann, um sicherzustellen, dass die Daten geht nicht verloren.

2. Da die zusammengeführten und geteilten Partitionen benachbarte Partitionen sind, wird die neue Partition entsprechend dem Wert der ursprünglichen Partition zusammengeführt und geteilt, und die neue Partition befindet sich auch an der Reihenfolge der ursprünglichen Partition .

4. Partition löschen

ALTER TABLE tblist DROP PARTITION e;

Hinweis: Durch das Löschen einer Partition werden auch die Daten in der Partition gelöscht und der aufgezählte Listenwert wird ebenfalls gelöscht Tabelle später.

3. Andere Partitionen

  1. Partitionieren Sie das Zeitfeld

CREATE TABLE listdate (
    id INT NOT NULL,
    hired DATETIME NOT NULL
)
PARTITION BY LIST( YEAR(hired) ) 
(
    PARTITION a VALUES IN (1990),
    PARTITION b VALUES IN (1991),
    PARTITION c VALUES IN (1992),
    PARTITION d VALUES IN (1993)
);

ALTER TABLE listdate ADD INDEX ix_hired(hired);

INSERT INTO listdate() VALUES(1,'1990-01-01 10:00:00'),(1,'1991-01-01 10:00:00'),(1,'1992-01-01 10:00:00');
EXPLAIN SELECT * FROM listdate WHERE hired='1990-01-01 10:00:00';

MySQL LIST-Partition

LIST-Partitionierung unterstützt auch die Konvertierungspartitionierung von nicht ganzzahligen Zeittypfeldern.

4. Tabellenpartitionen entfernen

ALTER TABLE tablename
REMOVE PARTITIONING ;

Hinweis: Beim Entfernen einer Partition wird nur die Definition der Partition entfernt und nicht die Daten gelöscht Letzteres wird zusammen mit den Daten gelöscht


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
Vorheriger Artikel:Linux-I/O-MultiplexingNächster Artikel:Linux-I/O-Multiplexing