Viele der Indexmethoden übergeben ein Byte-Array namens
        *key, welches den zu lesenden Indexeintrag in
        einem Standardformat angibt. Ihre Speicher-Engine muss die
        Informationen des Schlüssels extrahieren und in ihr internes
        Indexformat übersetzen, um die zum Index gehörige Zeile zu
        ermitteln.
      
        Die im Schlüssel vorliegenden Daten werden mit einer Iteration
        durch den Schlüssel beschafft. Ihr Format ist so, wie es in
        table->key_info[
        definiert wurde. Das folgende Beispiel aus
        index]->key_part[part_num]ha_berkeley.cc zeigt, wie die
        Speicher-Engine BerkeleyDB einen in
        *key definierten Schlüssel in ihr internes
        Format konvertiert:
      
/*
Erzeuge aus einem ungepackten MySQL-Schlüssel (wie dem, der von index_read() übermittelt wird) einen gepackten.
  
Anhand dieses Schlüssels wird eine Zeile gelesen
*/
  
DBT *ha_berkeley::pack_key(DBT *key, uint keynr, char *buff,
                                                const byte *key_ptr, uint key_length)
{
  KEY *key_info=table->key_info+keynr;
  KEY_PART_INFO *key_part=key_info->key_part;
  KEY_PART_INFO *end=key_part+key_info->key_parts;
  DBUG_ENTER("bdb:pack_key");
  
  bzero((char*) key,sizeof(*key));
  key->data=buff;
  key->app_private= (void*) key_info;
  
  for (; key_part != end && (int) key_length > 0 ; key_part++)
  {
      uint offset=0;
      if (key_part->null_bit)
      {
          if (!(*buff++ = (*key_ptr == 0)))         // Für NULL wird 0 gespeichert
          {
              key_length-= key_part->store_length;
              key_ptr+=   key_part->store_length;
              key->flags|=DB_DBT_DUPOK;
              continue;
          }
          offset=1;                                 // Daten liegen unter key_ptr+1
      }
      buff=key_part->field->pack_key_from_key_image(buff,(char*) key_ptr+offset,
      key_part->length);
      key_ptr+=key_part->store_length;
      key_length-=key_part->store_length;
  }
  key->size= (buff  - (char*) key->data);
  DBUG_DUMP("key",(char*) key->data, key->size);
  DBUG_RETURN(key);
}
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.

