Heim > Datenbank > MySQL-Tutorial > Hauptteil

Eine kurze Analyse von Codebeispielen der MySQL-Datentabellenpartitionierungstechnologie PARTITION

黄舟
Freigeben: 2017-03-11 14:34:46
Original
1265 Leute haben es durchsucht

Dieser Artikel führt hauptsächlich eine kurze Analyse der MySQL-Datentabellenpartitionierungstechnologie PARTITION ein und stellt die Partitionierungstechnologien RANGE, LIST und HASH in MySQL vor. Freunde in Not können sich darauf beziehen.

In diesem Kapitel lernen wir die Partitionierungstechnologie (RANGE, LIST, HASH) in MySQL kennen

Die Partitionierungstechnologie von MySQL ähnelt in gewisser Weise der horizontalen Tabellenpartitionierung, wird jedoch durchgeführt Die logische Ebene ist immer noch eine Tabelle für die Anwendung. Mit anderen Worten: Durch die Partitionierung wird eine Tabelle nicht geteilt.

In Mysql 5.1 (nachher) gibt es mehrere Partitionstypen:

RANGE-Partitionierung: Weisen Sie Partitionen mehrere Zeilen zu, basierend auf Spaltenwerten, die zu einem bestimmten kontinuierlichen Bereich gehören

LIST-Partitionierung: Ähnlich wie die Partitionierung nach RANGE besteht der Unterschied darin, dass die LIST-Partitionierung darauf basiert, dass der Spaltenwert mit einem bestimmten Wert in einem diskreten Wertesatz zur Auswahl übereinstimmt.

HASH-Partitionierung: basierend auf dem Rückgabewert eines Benutzer- definierter Ausdruck Um Partitionen auszuwählen, wird dieser Ausdruck anhand der Spaltenwerte der in die Tabelle einzufügenden Zeilen berechnet. Diese Funktion kann jeden in MySQL gültigen Ausdruck enthalten, der einen nicht negativen ganzzahligen Wert

KEY erzeugt Partitionierung: Im Vergleich zur Partitionierung durch HASH besteht der Unterschied darin, dass die KEY-Partition nur die Berechnung einer oder mehrerer Spalten unterstützt und der MySQL-Server eine eigene Hash-Funktion bereitstellt

Dinge, auf die bei der Partitionierung geachtet werden sollte :

1. Definieren Sie bei der Partitionierung entweder nicht den Primärschlüssel oder fügen Sie das Partitionsfeld zum Primärschlüssel hinzu
2. Das Partitionsfeld darf nicht NULL sein, sonst wird der Partitionsbereich bestimmt. Versuchen Sie also, NOT NULL

zu verwenden. Zuerst können Sie überprüfen, ob Ihre MySQL-Version PARTITION

mysql> show plugins;
 
| partition    | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
Nach dem Login kopieren

oder

mysql> show variables like "%part%";
 
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| have_partitioning | YES   |
+-------------------+-------+
Nach dem Login kopieren

RANGE-Partition unterstützt

Angenommen, Sie erstellen eine Tabelle wie folgt: Diese Tabelle enthält Mitarbeiterdatensätze von 20 Videotheken und die 20 Videotheken sind von 1 bis 20 nummeriert. Wenn Sie es in 4 kleine Partitionen aufteilen möchten, können Sie die RANGE-Partition verwenden. Die erstellte Datenbanktabelle sieht wie folgt aus:

mysql-> 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
     -> ) ENGINE=Myisam DEFAULT CHARSET=utf8
     -> 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)
     -> );
Nach dem Login kopieren

Wenn Sie Mitarbeiter, die in verschiedenen Zeiträumen gekündigt haben, separat speichern möchten, dann sind Sie hier richtig Kann Das getrennte Datumsfeld (d. h. der Zeitpunkt des Rücktritts) wird als Schlüssel verwendet und die erstellte SQL-Anweisung lautet wie folgt:

mysql-> 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
     -> ) ENGINE=Myisam DEFAULT CHARSET=utf8
     -> PARTITION BY RANGE (YEAR(separated)) (
     ->     PARTITION P0 VALUES LESS THAN (2001),
     ->     PARTITION P1 VALUES LESS THAN (2011),
     ->     PARTITION P2 VALUES LESS THAN (2021),
     ->     PARTITION P3 VALUES LESS THAN MAXVALUE
     -> );
Nach dem Login kopieren

Listenpartition

Gleiches Beispiel, wenn diese 20 Videotheken in 4 Regionen mit Vertriebsrechten verteilt sind

+------------------+--------------------------------------+
| 地区             | 音像店 ID 号                         |
+------------------+--------------------------------------+
| 北区             | 3, 5, 6, 9, 17                       |
| 东区             | 1, 2, 10, 11, 19, 20                 |
| 西区             | 4, 12, 13, 14, 18                    |
| 中心区           | 7, 8, 15, 16                         |
+------------------+--------------------------------------+
 
mysql-> 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
     -> ) ENGINE=Myisam DEFAULT CHARSET=utf8
     -> PARTITION BY LIST (store_id) (
     ->     PARTITION pNorth   VALUES IN (3, 5, 6, 9, 17),
     ->     PARTITION pEast    VALUES IN (1, 2, 10, 11, 19, 20),
     ->     PARTITION pWest    VALUES IN (4, 12, 13, 14, 18),
     ->     PARTITION pCentral VALUES IN (7, 8, 15, 16)
     -> );
Nach dem Login kopieren

Nachdem Sie es erstellt haben, können Sie die MySQL-Datenspeicherdatei eingeben in der MySQL-Konfigurationsdatei

shawn@Shawn:~$ sudo vi /etc/mysql/my.cnf;
 
[mysqld]
datadir         = /var/lib/mysql
 
shawn@Shawn:~$ cd /var/lib/mysql/dbName
shawn@Shawn:/var/lib/mysql/dbName$ ll
 
显示如下:
8768 Jun  7 22:01 employees.frm
  48 Jun  7 22:01 employees.par
   0 Jun  7 22:01 employees#P#pCentral.MYD
1024 Jun  7 22:01 employees#P#pCentral.MYI
   0 Jun  7 22:01 employees#P#pEast.MYD
1024 Jun  7 22:01 employees#P#pEast.MYI
   0 Jun  7 22:01 employees#P#pNorth.MYD
1024 Jun  7 22:01 employees#P#pNorth.MYI
   0 Jun  7 22:01 employees#P#pWest.MYD
1024 Jun  7 22:01 employees#P#pWest.MYI
Nach dem Login kopieren

Wie Sie hier sehen können, werden die Speicherdateien gemäß unserer Definition aufgeteilt

employees.frm = 表结构
employees.par = partition, 申明是一个分区表
.MYD = 数据文件
.MYI = 索引文件
Nach dem Login kopieren

HASH-Partition

HASH-Partitionierung wird hauptsächlich verwendet, um sicherzustellen, dass Daten gleichmäßig auf eine vorgegebene Anzahl von Partitionen verteilt werden.
Wenn Sie Mitarbeiter, die in verschiedenen Zeiträumen beigetreten sind, separat speichern möchten, können Sie das Datumsfeld mieten als Schlüssel

mysql-> 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
     -> ) ENGINE=Myisam DEFAULT CHARSET=utf8
     -> PARTITION BY HASH (YEAR(hired)) (
     ->     PARTITIONS 4
     -> );
     
#这里注意的是 PARTITIONS, 多了一个 s
Nach dem Login kopieren

Was hier erwähnt werden sollte, ist, dass die obigen Beispiele alle die Myisam-Speicher-Engine verwenden, die standardmäßig unabhängige Tabellenbereiche verwendet, sodass Sie unterschiedliche Werte in sehen können Festplattenspeicher oben. Partitionieren
Die InnoDB-Engine verwendet standardmäßig einen gemeinsam genutzten Tabellenbereich. Sie werden feststellen, dass sie nicht wie Myisam physisch partitioniert ist, sodass Sie die MySQL-Konfiguration ändern müssen 🎜>

shawn@Shawn:~$ sudo vi /etc/mysql/my.cnf;
 
#添加:
innodb_file_per_table=1
 
#重启 mysql
shawn@Shawn:~$ sudo /etc/init.d/mysql restart
Nach dem Login kopieren
Wenn Sie InooDB zu diesem Zeitpunkt partitionieren, treten die folgenden Auswirkungen auf:


8768 Jun  7 22:54 employees.frm
   48 Jun  7 22:54 employees.par
98304 Jun  7 22:54 employees#P#pCentral.ibd
98304 Jun  7 22:54 employees#P#pEast.ibd
98304 Jun  7 22:54 employees#P#pNorth.ibd
98304 Jun  7 22:54 employees#P#pWest.ibd
Nach dem Login kopieren

Partitionsverwaltung

Partition löschen

mysql> alter table employees drop partition pWest;
Nach dem Login kopieren

Partition hinzufügen

Das obige ist der detaillierte Inhalt vonEine kurze Analyse von Codebeispielen der MySQL-Datentabellenpartitionierungstechnologie PARTITION. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!