Speicher-Engines mit Indexunterstützung sollten die
        Indexinformationen möglichst während einer CREATE
        TABLE-Operation beschaffen und zur späteren
        Verwendung speichern. Der Grund: Die Indexinformationen sind
        beim Anlegen der Tabelle und des Indexes am einfachsten zu
        bekommen und lassen sich später nicht mehr so leicht abrufen.
      
        Die Daten des Tabellenindexes liegen in der
        key_info-Struktur des
        TABLE-Arguments der
        create()-Funktion vor.
      
        In der key_info-Struktur gibt es ein
        flag, welches das Verhalten des Indexes
        definiert:
      
#define HA_NOSAME 1 /* Keine Doppeleinträge vorhanden */ #define HA_PACK_KEY 2 /* String zu vorigem Schlüssel packen */ #define HA_AUTO_KEY 16 #define HA_BINARY_PACK_KEY 32 /* Alle Schlüssel zu vorigem Schlüssel packen */ #define HA_FULLTEXT 128 /* Volltextsuche */ #define HA_UNIQUE_CHECK 256 /* Schlüssel auf Eindeutigkeit prüfen */ #define HA_SPATIAL 1024 /* Raumbezogene Suche */ #define HA_NULL_ARE_EQUAL 2048 /* Gleichheitsvergleich für NULL in Schlüssel möglich */ #define HA_GENERATED_KEY 8192 /* Automatisch generierter Schlüssel */
        Zusätzlich zum flag ist ein Enumerator
        namens algorithm vorhanden, der den
        gewünschten Indextyp angibt:
      
enum ha_key_alg {
  HA_KEY_ALG_UNDEF=     0,  /* Nicht angegeben (alte Datei)     */
  HA_KEY_ALG_BTREE=     1,  /* B-Tree, ist der Standard          */
  HA_KEY_ALG_RTREE=     2,  /* R-Tree, für raumbezogenes Suchen */
  HA_KEY_ALG_HASH=      3,  /* HASH-Schlüssel (HEAP-Tabellen)      */
  HA_KEY_ALG_FULLTEXT=  4   /* FULLTEXT (MyISAM-Tabellen)     */
};
        Zusätzlich zum flag und
        algorithm ist ein Array von
        key_part-Elementen vorhanden, welche die
        einzelnen Teile eines zusammengesetzten Schlüssels beschreiben.
      
        Diese Schlüsselteile definieren das zu dem jeweiligen Teil
        gehörende Feld, geben an, ob der Schlüssel gepackt werden
        soll, und verraten den Datentyp und die Länge des Indexteils.
        Unter ha_myisam.cc finden Sie ein Beispiel
        dafür, wie diese Daten geparst werden.
      
        Als Alternative kann eine Speicher-Engine auch dem Beispiel von
        ha_berkeley.cc folgen und bei jeder
        Operation Indexinformationen aus der
        TABLE-Struktur des Handlers lesen.
      
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.

