1. Warum Partitionierung verwenden?
Wenn die Datenmenge zu groß ist (normalerweise Millionen oder Dutzende Millionen Daten), müssen die Daten einer Tabelle zur Speicherung in mehrere Tabellen aufgeteilt werden. Einige Abfragen können erheblich optimiert werden, vor allem weil die Daten, die eine bestimmte WHERE-Anweisung erfüllen, nur in einer oder mehreren Partitionen gespeichert werden können, sodass bei der Suche nicht nach anderen verbleibenden Partitionen gesucht werden muss.
2. Überprüfen Sie, ob MySQL die Partitionierung unterstützt.
Verwenden Sie den folgenden Befehl, um zu überprüfen, ob MySQL die Partitionierung unterstützt. ?
show variables like '%partition%';
CREATE TABLE employees ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30), hired DATE NOT NULL DEFAULT '1970-01-01', separated DATE NOT NULL DEFAULT '9999-12-31', job_code INT NOT NULL, store_id INT NOT NULL ) partition BY RANGE (store_id) ( partition p0 VALUES LESS THAN (6), partition p1 VALUES LESS THAN (11), partition p2 VALUES LESS THAN (16), partition p3 VALUES LESS THAN (21) );
In diesem Beispiel werden alle Zeilen, die sich auf Filialmitarbeiter beziehen, in Partition p0 gespeichert, und alle Zeilen, die sich auf Büro- und Supportpersonal beziehen, werden in Partition gespeichert p1: Alle Zeilen, die sich auf die Verwaltungsebene beziehen, werden in der Partition p2 gespeichert.
Partitionen anzeigen
show create table employees;
LIST-Partitionierung wird durch die Verwendung von „PARTITION BY LIST(expr)“ erreicht, wobei „expr“ ein bestimmter Spaltenwert oder eine Ganzzahl basierend auf einem bestimmten Spaltenwert ist, und gibt einen ganzzahligen Wertausdruck zurück und definiert dann jede Partition durch „VALUES IN (value_list)“, wobei „value_list“ eine durch Kommas getrennte Liste von Ganzzahlen ist.
create table category_part( cid int unsigned not null auto_increment,cname varchar(64) not null,parent_id int not null,primary key (cid,parent_id)) partition by list(parent_id)( partition p1 values in (1,2,3,6,9), partition p2 values in (4,5,10,22,23), partition p3 values in (7,8,11,12,13), partition p4 values in (14,15,16,17,20), partition p5 values in (18,19,21,24,25) );
5. HASH-Partitionierung
Der Zweck der Hash-Partitionierung besteht darin, Daten gleichmäßig auf vordefinierte Partitionen zu verteilen, um sicherzustellen, dass jede Partition die Datenmenge hat ist ungefähr gleich. In RANGE- und LIST-Partitionen müssen Sie explizit angeben, in welcher Partition ein bestimmter Spaltenwert oder eine Reihe von Spaltenwerten gespeichert werden soll. Bei der HASH-Partitionierung führt MYSQL diese Aufgaben automatisch aus und der Benutzer muss nur die Daten verwenden Der zu hashende Spaltenwert gibt einen Spaltenwert oder -ausdruck an und gibt die Anzahl der Partitionen an, in die die partitionierte Tabelle unterteilt wird.
Um die HAHS-Partitionierung zum Teilen einer Tabelle zu verwenden, fügen Sie der CREATE TABLE-Anweisung eine PARTITION BY HASH (expr)-Klausel hinzu, wobei „expr“ ein Ausdruck ist, der eine Ganzzahl zurückgibt. expr kann nur ein Spaltenname sein, dessen Feldtyp eine Ganzzahl ist. Darüber hinaus muss der Benutzer wahrscheinlich später eine PARTITITIONS-Num-Klausel hinzufügen, wobei num eine nicht negative Ganzzahl ist, die die Anzahl der Partitionen darstellt, in die unterteilt werden soll. Wenn keine PARTITIONS-Klausel enthalten ist, beträgt die Anzahl der Partitionen standardmäßig 1.
create table t_hash ( a int, b datetime) partition by hash (YEAR(b)) partitions 4;
Der Vorteil der LINEAR-HASH-Partitionierung besteht darin, dass das Hinzufügen, Löschen, Zusammenführen und Teilen von Partitionen schneller erfolgt, was sich positiv auf die Verarbeitung auswirkt große Datenmengen. Der Nachteil besteht darin, dass im Vergleich zur Datenverteilung, die durch die Verwendung der HASH-Partitionierung erzielt wird, die Verteilung der Daten auf die einzelnen Partitionen möglicherweise nicht ausgeglichen ist.
6. Schlüsselpartition
create table orders_key ( id int auto_increment, customer_surname varchar(30), store_id int, alesperson_id int, order_Date date, note varcahr(500), index_idx(id) ) engine=myisam partition by key(order_date) partitions 4;
Diese Partition ähnelt der Hash-Partition, außer dass der MySQL-Server im Gegensatz zu anderen Partitionstypen diese nicht verwendet eines int- oder null-Ausdrucks.
Das Obige ist der Inhalt von MySQL Advanced Fifteen - Table Partitioning. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (m.sbmmt.com).