MySQL unterstützt auch lineares Hashing, das sich vom regulären Hashing insofern unterscheidet, als es einen linearen Zweierpotenz-Algorithmus verwendet, während das reguläre Hashing den Modulus des Werts der Hashing-Funktion benutzt.
Der einzige syntaktische Unterschied zwischen der linearen und
der regulären Hash-Partitionierung besteht darin, dass der
PARTITION BY
-Klausel das Schlüsselwort
LINEAR
hinzugefügt wird:
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, store_id INT ) PARTITION BY LINEAR HASH( YEAR(hired) ) PARTITIONS 4;
Wenn Sie einen Ausdruck expr
haben,
wird beim linearen Hashing der Datensatz in Partition Nummer
N
von
num
Partitionen gespeichert, wobei
N
nach dem folgenden Algorithmus
abgeleitet ist:
Finde die nächste Zweierpotenz größer
num
. Wir nennen diesen Wert
V
; er kann folgendermaßen
berechnet werden:
V
= POWER(2, CEILING(LOG(2,num
)))
(Nehmen wir beispielsweise an,
num
sei 13. Dann ist
LOG(2,13)
gleich 3.7004397181411.
CEILING(3.7004397181411)
ist 4 und
V
=
POWER(2,4)
, was 16 ergibt.)
Setze N
=
F
(column_list
)
& (V
- 1).
Wobei N
>=
num
:
Setze V
=
CEIL(V
/ 2)
Setze N
=
N
&
(V
- 1)
Angenommen, die Tabelle t1
, die lineare
Hash-Partitionierung nutzt und 6 Partitionen hat, wird mit
folgender Anweisung angelegt:
CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATE) PARTITION BY LINEAR HASH( YEAR(col3) ) PARTITIONS 6;
Nehmen wir weiterhin an, Sie möchten in t1
zwei Datensätze einfügen, in denen die Spalte
col3
die Werte
'2003-04-14'
und
'1998-10-19'
aufweist. Die Partitionsnummer
für die erste dieser Spalten wird folgendermaßen ermittelt:
V
= POWER(2, CEILING( LOG(2,7) )) = 8N
= YEAR('2003-04-14') & (8 - 1) = 2003 & 7 = 3 (3 >= 6 is FALSE: record stored in partition #3)
Die Partitionsnummer für den zweiten Eintrag wird berechnet mit:
V
= 8N
= YEAR('1998-10-19') & (8-1) = 1998 & 7 = 6 (6 >= 6 is TRUE: additional step required)N
= 6 & CEILING(5 / 2) = 6 & 3 = 2 (2 >= 6 is FALSE: record stored in partition #2)
Der Vorteil einer linearen Hash-Partitionierung besteht darin, dass sich Partitionen weit schneller hinzufügen, löschen, zusammenführen und aufspalten lassen. Das kann ein Segen sein, wenn man mit Tabellen arbeiten muss, die extrem große Datenmengen (Terabytes) enthalten. Der Nachteil ist, dass die Daten wahrscheinlich nicht so gleichmäßig auf die Partitionen verteilt werden wie bei der normalen Hash-Partitionierung.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.