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.