Die Partitionierung durch Schlüssel gleicht der Partitionierung
        durch Hash, nur dass dort, wo die Hash-Partitionierung einen
        benutzerdefinierten Ausdruck verwendet, die
        Schlüsselpartitionierung eine vom MySQL Server gelieferte
        Hash-Funktion einsetzt. MySQL Cluster verwendet zu diesem Zweck
        MD5(); für Tabellen, die andere
        Speicher-Engines benutzen, setzt der Server seine eigene interne
        Hash-Funktion ein, die auf demselben Algorithmus wie
        PASSWORD() beruht.
      
        Die Syntaxregeln für CREATE TABLE ... PARTITION BY
        KEY sind dieselben wie bei der Erstellung einer
        Hash-partitionierten Tabelle. Die Hauptunterschiede sind:
      
            Statt HASH wird KEY
            eingesetzt.
          
            KEY nimmt nur eine Liste mit einem oder
            mehreren Spaltennamen entgegen. Seit MySQL 5.1.5 müssen die
            Spalten, die als Partitionierungsschlüssel eingesetzt
            werden, den Primärschlüssel der Tabelle (sofern sie einen
            hat) ganz oder teilweise abdecken.
          
            Seit MySQL 5.1.6 nimmt KEY eine Liste mit
            null oder mehr Spaltennamen entgegen. Wenn kein Spaltenname
            als Partitionierungsschlüssel angegeben ist, wird der
            Primärschlüssel der Tabelle verwendet. Die folgende
            CREATE TABLE-Anweisung gilt
            beispielsweise in MySQL 5.1.6 oder höher:
          
CREATE TABLE k1 (   
    id INT NOT NULL PRIMARY KEY,   
    name VARCHAR(20) 
) 
PARTITION BY KEY() 
PARTITIONS 2;
            In diesem Fall ist der Partitionierungsschlüssel die Spalte
            id, auch wenn das in der Ausgabe von
            SHOW CREATE TABLE oder in der Spalte
            PARTITION_EXPRESSION der Tabelle
            INFORMATION_SCHEMA.PARTITIONS nicht
            erkennbar ist.
          
            Hinweis: Seit MySQL 5.1.6
            werden außerdem Tabellen, die die Speicher-Engine
            NDB Cluster verwenden, implizit mit
            KEY partitioniert, wobei auch hier wieder
            der Primärschlüssel der Tabelle als
            Partitionierungsschlüssel dient. Nehmen wir als Beispiel
            die Tabelle, die mit folgender Anweisung erzeugt wird:
          
CREATE TABLE kndb (   
    id INT NOT NULL PRIMARY KEY,   
    name VARCHAR(20) NOT NULL 
)
ENGINE=NDBCLUSTER;
            Obwohl die Anweisung keine PARTITION
            BY-Klausel enthält, zeigt die Ausgabe von
            SHOW CREATE TABLE kndb Folgendes an:
          
CREATE TABLE `kndb` (   
    `id` int(11) NOT NULL,   
    `name` varchar(20) NOT NULL.
    PRIMARY KEY  (`id`) 
)
ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY ();
            Falls die Cluster-Tabelle keinen expliziten
            Primärschlüssel hat, wird der „verborgene“
            Primärschlüssel, den die Speicher-Engine
            NDB automatisch für jede Cluster-Tabelle
            generiert, als Partitionierungsschlüssel eingesetzt.
          
            Wichtig: Auf einer
            schlüsselpartitionierten Tabelle, die eine andere
            Speicher-Engine als NDB CLuster
            verwendet, können Sie keine ALTER TABLE DROP
            PRIMARY KEY-Anweisung ausführen, ansonsten tritt
            der Fehler ERROR 1466 (HY000): Field in list of
            fields for partition function not found in table
            ein. Dieses Problem betrifft keine MySQL CLuster-Tabellen,
            die durch KEY partitioniert werden: In
            solchen Fällen wird die Tabelle reorganisiert, wobei der
            „verborgene“ Primärschlüssel als neuer
            Partitionierungsschlüssel der Tabelle verwendet wird. Siehe
            Kapitel 16, MySQL Cluster.
          
Es ist auch möglich, eine Tabelle durch linearen Schlüssel zu partitionieren. Hier sehen Sie ein einfaches Beispiel:
CREATE TABLE tk (
    col1 INT NOT NULL,
    col2 CHAR(5),
    col3 DATE
) 
PARTITION BY LINEAR KEY (col1)
PARTITIONS 3;
        Die Verwendung von LINEAR hat auf die
        KEY-Partitionierung denselben Effekt wie auf
        die HASH-Partitionierung, wobei die
        Partitionsnummer mit einem Zweierpotenz-Algorithmus anstatt mit
        Modulo-Arithmetik abgeleitet wird. Eine Beschreibung dieses
        Algorithmus und seiner Implikationen finden Sie unter
        Abschnitt 17.2.3.1, „LINEAR 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.

