Die Listenpartitionierung in MySQL ähnelt in vieler Hinsicht
        der Bereichspartitionierung. Wie bei dieser muss jede Partition
        explizit definiert werden. Der Hauptunterschied besteht darin,
        dass bei einer Listenpartitionierung die einzelnen Partitionen
        anhand der Frage gebildet werden, ob ein Spaltenwert in einer
        von mehreren Wertelisten vorkommt, während
        bei der Bereichspartitionierung gefragt wird, ob er in einer von
        mehreren Wertefolgen vorkommt. Diese Form
        der Partitionierung nehmen Sie mit PARTITION BY
        LIST( vor, wobei
        expr)expr ein Spaltenwert oder ein auf
        einem Spaltenwert basierender Ausdruck ist, der einen Integer
        zurückgibt. Die einzelnen Partitionen werden sodann durch
        VALUES IN
        ( definiert,
        wobei value_list)value_list eine kommagetrennte
        Liste von Integern ist.
      
        Hinweis: In MySQL
        5.1 kann der Spaltenwert bei einer
        LIST-Partitionierung nur mit einer
        Integer-Liste verglichen werden.
      
        Im Gegensatz zu Bereichspartitionen müssen Listenpartitionen
        nicht in einer bestimmten Reihenfolge definiert werden. Genauere
        Hinweise zur Syntax finden Sie unter
        Abschnitt 13.1.5, „CREATE TABLE“.
      
        In den nachfolgenden Beispielen gehen wir davon aus, dass die
        Grunddefinition der zu partitionierenden Tabelle die der
        nachfolgenden CREATE TABLE-Anweisung 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
);
        (Dies ist dieselbe Tabelle, die auch als Grundlage der Beispiele
        in Abschnitt 17.2.1, „RANGE-Partitionierung“, diente.)
      
Angenommen, wir haben eine Kette von 20 Videotheken, die auf 4 Franchisenehmer verteilt ist, wie in der folgenden Tabelle gezeigt:
| Region | Store ID Numbers | 
| North | 3, 5, 6, 9, 17 | 
| East | 1, 2, 10, 11, 19, 20 | 
| West | 4, 12, 13, 14, 18 | 
| Central | 7, 8, 15, 16 | 
        Um diese Tabelle so zu partitionieren, dass jeweils die
        Zweigstellen einer Region zusammenhängend gespeichert werden,
        könnten Sie die folgende CREATE
        TABLE-Anweisung einsetzen:
      
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 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)
);
        Nun ist es ganz einfach, regionale Angestelltendaten in die
        Tabelle zu laden oder aus ihr zu löschen. Nehmen wir
        beispielsweise an, alle Zweigstellen der Region West werden an
        ein anderes Unternehmen verkauft. Dann könnten alle
        Angestelltendaten der Zweigstellen dieser Region mit der Anfrage
        ALTER TABLE employees DROP PARTITION pWest;
        gelöscht werden, die viel schneller als die entsprechende
        DELETE-Anfrage DELETE FROM employees
        WHERE store_id IN (4,12,13,14,18); ausgeführt wird.
      
        Wichtig: Wenn Sie versuchen,
        eine Zeile einzufügen, deren Spaltenwert (oder Rückgabewert
        für den Partitionierungsausdruck) in den Listen mit den
        Partitionierungswerten nicht vorkommt, scheitert die
        INSERT-Anfrage mit einer Fehlermeldung. So
        würde beispielsweise die folgende Anfrage bei dem oben
        skizzierten Schema einer LIST-Partitionierung
        fehlschlagen:
      
INSERT INTO employees VALUES 
    (224, 'Linus', 'Torvalds', '2002-05-01', '2004-10-12', 42, 21);
        Dieser Fehler tritt ein, da der
        store_id-Spaltenwert 21 in
        keiner der Wertelisten auftritt, die zur Definition der
        Partitionen pNorth, pEast,
        pWest und pCentral
        angegeben wurden. Es ist wichtig zu wissen, dass für
        Listenpartitionen keine „Catchall“-Definition wie
        VALUES LESS THAN MAXVALUE existiert, um Werte
        unterzubringen, die in keiner der Wertelisten auftauchen. Mit
        anderen Worten: Jeder Partitionierungswert muss in
        einer der Wertelisten vorhanden sein.
      
        Wie die RANGE-Partitionierung kann auch die
        LIST-Partitionierung mit einer Hash- oder
        Schlüsselpartitionierung kombiniert werden, um eine
        zusammengesetzte Partitionierung (Teilpartitionierung) zu
        bilden. Siehe Abschnitt 17.2.5, „Unterpartitionen“.
      
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.

