Frage

MySQL gibt das Zeilenformat einer Tabelle als entweder fest oder dynamisch, in Abhängigkeit von den Spaltendatentypen. Wenn eine Tabelle eine Spalte mit variabler Länge Datentyp, wie Text oder VARCHAR hat, ist das Zeilenformat dynamisch; Ansonsten ist es festgelegt.

Meine Frage ist, was ist der Unterschied zwischen den beiden Zeilenformate? Ist ein effizienter als die anderen?

War es hilfreich?

Lösung

Der Unterschied wirklich nur wichtig für MyISAM, andere Speicher-Engines kümmern sich nicht um den Unterschied. EDIT: Viele Anwender kommentierte, dass InnoDB tut Pflege: link 1 von Steampowered , link 2 von Kaan .

Mit MyISAM mit fester Breite Zeilen, gibt es einige Vorteile:

  1. Keine Zeile Fragmentierung: Es ist möglich, mit Zeilen variabler Breite einzelne Reihen über die Datendatei aufgeteilt in mehrere Abschnitte zu erhalten. Dies kann erhöht Scheibe sucht und Operationen verlangsamen. Es ist möglich, es mit OPTIMIZE TABLE defragmentieren, aber dies ist nicht immer praktisch.

  2. Datendateizeiger Größe: In MyISAM, gibt es ein Konzept eines Datendateizeiger, der verwendet wird, wenn es um die Datendatei verweisen muss. Zum Beispiel wird dies in Indizes verwendet werden, wenn sie sich beziehen, wo die Zeile tatsächlich vorhanden ist. Mit fester Breite Größen dieser Zeiger auf die Zeile in der Datei-Offset basiert (dh. Zeilen 1, 2, 3, unabhängig von ihrer Größe). Mit variabler Breite, wird der Zeiger auf der Basis der Byte-Offset (d. Reihen könnten 1, 57, 163 sein). Das Ergebnis ist, dass mit großen Tabellen, die Zeiger größer sein muss, die dann fügt viel mehr Aufwand in die Tabelle möglicherweise.

  3. Einfachere im Fall von Korruption zu beheben. Da jede Zeile die gleiche Größe ist, wenn Ihre MyISAM-Tabelle beschädigt wird es viel einfacher zu reparieren ist, so dass Sie nur die Daten verlieren, die tatsächlich beschädigt ist. Mit variabler Breite, in der Theorie ist es möglich, dass der variable Breite Zeiger verkorkste erhalten, die in hosing Daten in einem schlechten Weg führen kann.

Jetzt ist der Hauptnachteil von fester Breite ist, dass es mehr Platz verschwendet. Zum Beispiel müssen Sie CHAR-Felder anstelle von VARCHAR-Feldern verwenden, so dass Sie am Ende mit zusätzlichem Platz aufgenommen.

Normalerweise werden Sie nicht viel Wahl im Format haben, da es auf dem Schema basiert diktiert wird. Allerdings könnte es sich lohnen, wenn Sie nur ein paar varchar ist oder eine einzelne Blob / Text müssen versuchen, in diese Richtung zu optimieren. Betrachten wir zum Beispiel die einzige varchar in ein char Umschalten oder teilen Sie die blob in seiner eigenen Tabelle.

Sie können sogar mehr darüber lesen Sie unter:

http://dev.mysql.com/doc/ refman / 5.0 / en / static-format.html

http://dev.mysql.com/doc/ refman / 5.0 / de / dynamic-format.html

Andere Tipps

Ein wesentlicher Unterschied tritt auf, wenn Sie einen Datensatz aktualisieren. Wenn das Zeilenformat festgelegt ist, gibt es keine Änderung in der Länge des Datensatzes. wenn das Zeilenformat dynamischer Im Gegensatz dazu ist und die neuen Daten bewirkt, dass die Aufzeichnung in der Länge zu erhöhen, wird ein Link zu verweisen auf die „Überlauf“ Daten verwendet wird (das heißt, sie den Überlauf-Zeiger genannt wird).

Diese Fragmente in der Tabelle und in der Regel Dinge verlangsamt. Es gibt einen Befehl (OPTIMIZE TABLE) zu defragmentieren, die etwas das Problem mildert.

Diese Seite in der MySQL-Dokumentation scheint hier die Top-Antwort zu widersprechen, dass DYNAMIC Zeilenformat bedeutet, etwas für InnoDB-Tabellen als auch:

http://dev.mysql.com/doc/innodb /1.1/en/innodb-row-format-dynamic.html

Fixed bedeutet, dass jede Zeile ist genau die gleiche Größe. Das bedeutet, dass, wenn die dritte Zeile auf einer Datenseite geladen werden muss, ist es genau Pageheader + 2 * Zeilengröße sein wird, einige Zugriffszeit zu sparen.

Um den Beginn einer dynamischen Aufzeichnung, die Liste der Rekord-Offsets finden muss konsultiert werden, was eine zusätzliche Indirektion beinhaltet.

Kurz gesagt, ja, es gibt eine leichte Leistungseinbußen für dynamische Zeilen. Nein, es ist nicht ein sehr großer. Wenn Sie denken, es wird ein Problem, Test für sie.

sollte schneller und fester sein sicherer als dynamisch, mit dem Nachteil einer festen kohle Länge aufweist. Sie können diese Informationen finden Sie hier: http: //dev.mysql .com / doc / refman / 5.0 / en / static-format.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top