Suche…


Bemerkungen

  • RANGE partitioning . Diese Art der Partitionierung weist den Partitionen Zeilen zu, basierend auf Spaltenwerten, die in einen bestimmten Bereich fallen.

  • LIST Partitionierung . Ähnlich der Partitionierung nach RANGE, nur dass die Partition basierend auf Spalten ausgewählt wird, die mit einem Satz diskreter Werte übereinstimmen.

  • HASH-Partitionierung Bei dieser Art der Partitionierung wird eine Partition basierend auf dem Wert ausgewählt, der von einem benutzerdefinierten Ausdruck zurückgegeben wird, der Spaltenwerte in Zeilen bearbeitet, die in die Tabelle eingefügt werden sollen. Die Funktion kann aus einem beliebigen in MySQL gültigen Ausdruck bestehen, der einen nicht negativen Ganzzahlwert ergibt. Eine Erweiterung dieses Typs, LINEAR HASH , ist ebenfalls verfügbar.

  • KEY Partitionierung . Diese Art der Partitionierung ähnelt der Partitionierung durch HASH, mit der Ausnahme, dass nur eine oder mehrere auszuwertende Spalten bereitgestellt werden und der MySQL-Server seine eigene Hash-Funktion bereitstellt. Diese Spalten können andere Werte als ganzzahlige Werte enthalten, da die von MySQL bereitgestellte Hash-Funktion unabhängig vom Spaltendatentyp ein ganzzahliges Ergebnis garantiert. Eine Erweiterung dieses Typs, LINEAR KEY , ist ebenfalls verfügbar.

RANGE Partitionierung

Eine nach Bereichen partitionierte Tabelle wird so partitioniert, dass jede Partition Zeilen enthält, für die der Wert des Partitionierungsausdrucks innerhalb eines bestimmten Bereichs liegt. Die Bereiche sollten zusammenhängend sein, sich jedoch nicht überlappen, und werden mit dem Operator VALUES LESS THAN definiert. Angenommen, Sie erstellen eine Tabelle wie die folgende, um Personaldatensätze für eine Kette von 20 Videospeichern mit den Nummern 1 bis 20 zu speichern:

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

Diese Tabelle kann je nach Bedarf auf verschiedene Arten nach Bereichen partitioniert werden. Eine Möglichkeit wäre die Verwendung der store_id Spalte. Beispielsweise können Sie sich entscheiden, die Tabelle auf vier Arten zu partitionieren, indem Sie eine PARTITION BY RANGE Klausel wie hier gezeigt hinzufügen:

ALTER TABLE employees 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 für einen ganzzahligen Wert, der immer größer als der größtmögliche ganzzahlige Wert ist (in der mathematischen Sprache dient er als kleinste obere Grenze).

basierend auf dem offiziellen MySQL-Dokument .

LISTE Partitionierung

Die Listenpartitionierung ähnelt in vielerlei Hinsicht der Bereichspartitionierung. Wie bei der Partitionierung nach RANGE muss jede Partition explizit definiert werden. Der Hauptunterschied zwischen den beiden Partitionierungsarten besteht darin, dass bei der Listenpartitionierung jede Partition basierend auf der Zugehörigkeit eines Spaltenwerts in einer Wertelistengruppe definiert und ausgewählt wird und nicht in einem Satz zusammenhängender Bereiche von Werte. Dazu verwenden Sie PARTITION BY LIST(expr) wobei expr ein Spaltenwert oder ein Ausdruck ist, der auf einem Spaltenwert basiert und einen ganzzahligen Wert VALUES IN (value_list) Anschließend wird jede Partition mit Hilfe von VALUES IN (value_list) , wobei value_list ist kommagetrennte Liste von Ganzzahlen.

Für die folgenden Beispiele gehen wir davon aus, dass die grundlegende Definition der zu partitionierenden Tabelle von der hier gezeigten CREATE TABLE Anweisung bereitgestellt 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
);

Angenommen, es gibt 20 Videotheken, die auf vier Franchises verteilt sind, wie in der folgenden Tabelle gezeigt.

Region ID-Nummern speichern
Norden 3, 5, 6, 9, 17
Osten 1, 2, 10, 11, 19, 20
Westen 4, 12, 13, 14, 18
Zentral 7, 8, 15, 16

Um diese Tabelle so zu partitionieren, dass Zeilen für Geschäfte, die zu derselben Region gehören, in derselben Partition gespeichert werden

ALTER TABLE employees 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)
);

basierend auf dem offiziellen MySQL-Dokument .

HASH-Partitionierung

Die Partitionierung durch HASH dient in erster Linie dazu, eine gleichmäßige Verteilung der Daten auf eine vorbestimmte Anzahl von Partitionen sicherzustellen. Bei der Bereichs- oder Listenpartitionierung müssen Sie explizit angeben, in welcher Partition ein bestimmter Spaltenwert oder ein Satz von Spaltenwerten gespeichert werden soll. Bei der Hash-Partitionierung übernimmt MySQL dies für Sie. Sie müssen nur einen Spaltenwert oder -ausdruck angeben, der auf einem zu hashenden Spaltenwert und der Anzahl der Partitionen basiert, in die die partitionierte Tabelle aufgeteilt werden soll.

Die folgende Anweisung erstellt eine Tabelle, die Hashing für die store_id-Spalte verwendet und in 4 Partitionen unterteilt ist:

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 HASH(store_id)
PARTITIONS 4;

Wenn Sie keine PARTITIONS Klausel PARTITIONS , beträgt die Anzahl der Partitionen standardmäßig 1.

basierend auf dem offiziellen MySQL-Dokument .



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow