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';
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
2. Fügen Sie einen Wert ein, der nicht in der Liste enthalten ist
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
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));
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
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';
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