Ein dynamisches Speicherformat wird verwendet, wenn eine
          MyISAM-Tabelle Spalten variabler Länge
          enthält (VARCHAR-,
          VARBINARY-, BLOB- oder
          TEXT-Spalten), oder wenn die Tabelle mit
          der Tabellenoption ROW_FORMAT=DYNAMIC
          angelegt wurde.
        
Das dynamische Format ist ein wenig komplizierter als das statische, da jede Zeile einen Header mit einer Längenangabe besitzt. Eine Zeile kann fragmentiert (an nicht-benachbarten Orten gespeichert) werden, wenn sie aufgrund eines Updates länger wird.
          Mit OPTIMIZE TABLE oder myisamchk
          -r lassen sich Tabellen defragmentieren. Wenn in
          einer Tabelle, die auch Spalten variabler Länge besitzt,
          Spalten mit festgelegter Länge vorliegen, die oft
          angesprochen oder geändert werden, so empfiehlt es sich, die
          Spalten mit variabler Länge in andere Tabellen auszulagern,
          um Fragmentierung zu verhindern.
        
Kennzeichen von dynamischen Tabellen:
Alle String-Spalten sind dynamisch, außer jenen, deren Länge weniger als vier beträgt.
              Vor jeder Zeile steht eine Bitmap, die für String-Spalten
              angibt, welche Spalten den leeren String enthalten, und
              für numerische Spalten, welche Spalten den Wert null
              enthalten. Beachten Sie, dass dies keine Spalten mit
              NULL-Werten einbezieht. Wenn eine
              String-Spalte nach dem Entfernen angehängter Leerzeichen
              die Länge null hat oder eine numerischen Spalte den Wert
              Null hat, wird sie in der Bitmap markiert und nicht auf
              der Festplatte gespeichert. Nicht-leere Strings werden mit
              einem Längen-Byte plus dem String-Inhalt gespeichert.
            
Sie benötigen normalerweise weniger Festplattenplatz als Festlängen-Tabellen.
              Jede Zeile belegt nur so viel Platz wie nötig. Doch wenn
              eine Zeile wächst, wird sie aufgespalten, was zu
              Fragmentierung führt. Wenn Sie zum Beispiel eine Zeile
              mit Daten aktualisieren, die ihre Länge anwachsen lassen,
              so wird sie fragmentiert. In diesem Fall kann es
              erforderlich sein, gelegentlich OPTIMIZE
              TABLE oder myisamchk -r
              auszuführen, um die Leistung zu verbessern.
              myisamchk -ei kann Ihnen Statistikdaten
              zu Ihrer Tabelle liefern.
            
Sie sind nach einem Absturz schwerer zu rekonstruieren als Tabellen fester Länge, da die Zeilen unter Umständen in viele Stücke fragmentiert sind und Links (Fragmente) verlorengegangen sein könnten.
Die erwartete Zeilenlänge für dynamische Zeilen wird mit folgendem Ausdruck berechnet:
3 + (number of columns+ 7) / 8 + (number of char columns) + (packed size of numeric columns) + (length of strings) + (number of NULL columns+ 7) / 8
              Für jeden Link kommen 6 Bytes hinzu. Eine dynamische
              Zeile wird immer dann verknüpft (verlinkt), wenn ein
              Update sie verlängert. Da jeder neue Link mindestens 20
              Bytes hat, passt die nächste Verlängerung wahrscheinlich
              noch in denselben Link mit hinein. Wenn nicht, wird ein
              neuer Link angelegt. Die Anzahl der Links lässt sich mit
              myisamchk -ed feststellen. Alle Links
              können mit OPTIMIZE TABLE oder
              myisamchk -r entfernt werden.
            
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.

