Heim  >  Artikel  >  Datenbank  >  Detaillierte Code-Erklärung der vier Partitionstypen von MySQL-Tabellen

Detaillierte Code-Erklärung der vier Partitionstypen von MySQL-Tabellen

黄舟
黄舟Original
2017-03-18 14:33:011526Durchsuche

Ich habe nur die folgenden vier Datenbankpartitionen implementiert: RANGE (Bereichs-)Partition Es gibt drei weitere, die ich später implementieren werde. Freunde, die es implementiert haben, können ihre Meinung mitteilen ist ein guter Artikel.

Vier Partitionstypen von MySQL

1. Was ist Tabellenpartitionierung?

Um es für Laien auszudrücken: Tabellenpartitionierung ist eine große Tabelle. Die Bedingungen sind in mehrere kleine Tabellen unterteilt. Mysql5.1 beginnt, die Partitionierung von Datentabellen zu unterstützen. Wenn eine Benutzertabelle beispielsweise mehr als 6 Millionen Datensätze enthält, kann die Tabelle nach dem Datum des Eintrags in die Datenbank oder nach dem Speicherort partitioniert werden. Natürlich kann die Partitionierung auch auf anderen Bedingungen basieren.

2. Warum die Tabelle partitionieren

Um die Skalierbarkeit, Verwaltbarkeit und Datenbankeffizienz großer Tabellen und Tabellen mit verschiedenen Zugriffsmodi zu verbessern. Zu den Vorteilen von

-Partitionen gehören:

kann mehr Daten speichern als eine einzelne Festplatte oder

Dateisystem-Partition. Für Daten, die ihre Bedeutung verloren haben, können Sie die Daten normalerweise einfach löschen, indem Sie die mit diesen Daten verbundenen Partitionen löschen. Im Gegenteil, in manchen Fällen kann der Prozess des Hinzufügens neuer Daten einfach implementiert werden, indem eine neue Partition speziell für diese neuen Daten hinzugefügt wird. Zu den weiteren Vorteilen, die üblicherweise mit der Partitionierung verbunden sind, gehören die unten aufgeführten. Diese Funktionen in der MySQL-Partitionierung sind noch nicht implementiert, stehen aber ganz oben auf unserer Prioritätenliste. Wir hoffen, sie in die Produktionsversion von 5.1 aufzunehmen.
Einige Abfragen können erheblich optimiert werden, vor allem dadurch, dass 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. Da die Partitionierung nach der Erstellung der partitionierten Tabelle geändert werden kann, können Sie die Daten neu organisieren, um die Effizienz häufig verwendeter Abfragen zu verbessern, sofern Sie dies nicht bereits bei der ersten Konfiguration des Partitionierungsschemas getan haben.
Abfragen mit
Aggregationsfunktionen wie SUM() und COUNT() können problemlos parallel verarbeitet werden. Ein einfaches Beispiel für eine solche Abfrage ist „SELECT salesperson_id, COUNT (orderers) as order_total FROM sales GROUP BY salesperson_id;“. „Parallel“ bedeutet, dass die Abfrage gleichzeitig auf jeder Partition ausgeführt werden kann und das Endergebnis einfach die Summe der über alle Partitionen erhaltenen Ergebnisse ist. Erzielen Sie einen höheren Abfragedurchsatz, indem Sie Datenabfragen auf mehrere Festplatten verteilen. 3. Partitionstyp
RANGE-Partitionierung: Weisen Sie Partitionen mehrere Zeilen zu, basierend auf Spaltenwerten, die zu einem bestimmten kontinuierlichen Intervall gehören.

LIST-Partitionierung: Ähnlich wie bei der Partitionierung nach RANGE besteht der Unterschied darin, dass die LIST-Partitionierung basierend auf dem Spaltenwert ausgewählt wird, der einem bestimmten Wert in einem diskreten Wertesatz entspricht.

HASH-Partitionierung: Eine Partition, die auf der Grundlage des Rückgabewerts eines benutzerdefinierten Ausdrucks ausgewählt wird, der anhand der Spaltenwerte der in die Tabelle einzufügenden Zeilen berechnet wird. Diese Funktion kann jeden gültigen Ausdruck in MySQL enthalten, der einen nicht negativen ganzzahligen Wert erzeugt.

KEY-Partitionierung: Ähnlich wie bei der HASH-Partitionierung besteht der Unterschied darin, dass die KEY-Partitionierung nur die Berechnung einer oder mehrerer Spalten unterstützt und der MySQL-Server eine eigene Hash-Funktion bereitstellt. Es müssen eine oder mehrere Spalten mit ganzzahligen Werten vorhanden sein.

RANGE-Partitionierung

Weist mehrere Zeilen Partitionen zu, basierend auf Spaltenwerten, die zu einem bestimmten zusammenhängenden Bereich gehören.

Diese Intervalle müssen kontinuierlich sein und dürfen sich nicht überlappen. Verwenden Sie den Operator WERTE WENIGER ALS

, um sie zu definieren. Nachfolgend finden Sie Beispiele.

SQL-Code:


Gemäß diesem Partitionierungsschema werden alle Zeilen, die den Mitarbeitern entsprechen, die in den Filialen 1 bis 5 arbeiten, in der Partition P0, Mitarbeiter in Filialen, gespeichert 6 bis 10 werden in P1 gespeichert und so weiter. Beachten Sie, dass jede Partition der Reihe nach definiert wird, von der niedrigsten zur höchsten. Dies ist eine Anforderung der PARTITION BY RANGE-Syntax und ähnelt in dieser Hinsicht einer „switch ... case“-Anweisung in C oder Java. Für eine neue Zeile mit den Daten (72, „Michael“, „Widenius“, „1998-06-25“, NULL, 13) lässt sich leicht feststellen, dass sie in die p2-Partition eingefügt wird, wenn es sich jedoch um eine Zahl handelt wird hinzugefügt Was passiert mit dem 21. Store? Da es in diesem Szenario keine Regel gibt, Geschäfte mit einer Store_ID größer als 20 einzubeziehen, weiß der Server nicht, wo die Zeile gespeichert werden soll, was zu einem Fehler führt. Dieser Fehler kann vermieden werden, indem in der CREATE TABLE-Anweisung eine „catchall“ VALUES LESS THAN-Klausel verwendet wird, die alle Werte angibt, die größer als ein explizit angegebener Höchstwert sind:
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)
);
SQL-Code:

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 MAXVALUE
);

MAXVALUE 表示最大的可能的整数值。现在,store_id 列值大于或等于16(定义了的最高值)的所有行都将保存在分区p3中。在将来的某个时候,当商店数已经增长到25, 30, 或更多 ,可以使用ALTER TABLE语句为商店21-25, 26-30,等等增加新的分区。在几乎一样的结构中,你还可以基于雇员的工作代码来分割表,也就是说,基于job_code 列值的连续区间。例如——假定2位数字的工作代码用来表示普通(店内的)工人,三个数字代码表示办公室和支持人员,四个数字代码表示管理层,你可以使用下面的语句创建该分区表:

Sql代码:

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 (job_code) (
PARTITION p0 VALUES LESS THAN (100),
PARTITION p1 VALUES LESS THAN (1000),
PARTITION p2 VALUES LESS THAN (10000)
);

在这个例子中, 店内工人相关的所有行将保存在分区p0中,办公室和支持人员相关的所有行保存在分区p1中,管理层相关的所有行保存在分区p2中。在VALUES LESS THAN 子句中使用一个表达式也是可能的。这里最值得注意的限制是MySQL 必须能够计算表达式的返回值作为LESS THAN (ad79d2732f294f8b8c01b7007dba89e0= num: ·  设置 V = CEIL(V / 2) ·  设置 N = N & (V – 1) 例如,假设表t1,使用线性哈希分区且有4个分区,是通过下面的语句创建的: CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATE) PARTITION BY LINEAR HASH( YEAR(col3) ) PARTITIONS 6; 现在假设要插入两行记录到表t1中,其中一条记录col3列值为’2003-04-14′,另一条记录col3列值为’1998-10-19′。第一条记录将要保存到的分区确定如下: V = POWER(2, CEILING(LOG(2,7))) = 8 N = YEAR(’2003-04-14′) & (8 – 1)    = 2003 & 7    = 3 (3 >= 6 为假(FALSE): 记录将被保存到#3号分区中) 第二条记录将要保存到的分区序号计算如下: V = 8 N = YEAR(’1998-10-19′) & (8-1)   = 1998 & 7   = 6 (6 >= 4 为真(TRUE): 还需要附加的步骤) N = 6 & CEILING(5 / 2)   = 6 & 3   = 2   (2 >= 4 为假(FALSE): 记录将被保存到#2分区中) 按照线性哈希分区的优点在于增加、删除、合并和拆分分区将变得更加快捷,有利于处理含有极其大量(1000吉)数据的表。它的缺点在于,与使用常规HASH分区得到的数据分布相比,各个分区间数据的分布不大可能均衡。

KSY分区

类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含整数值。

Sql代码:

CREATE TABLE tk (
col1 INT NOT NULL,
col2 CHAR(5),
col3 DATE
)
PARTITION BY LINEAR KEY (col1)
PARTITIONS 3;

在KEY分区中使用关键字LINEAR和在HASH分区中使用具有同样的作用,分区的编号是通过2的幂(powers-of-two)算法得到,而不是通过模数算法。

Das obige ist der detaillierte Inhalt vonDetaillierte Code-Erklärung der vier Partitionstypen von MySQL-Tabellen. 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