Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Zeilenformat:Unterschied zwischen fest und dynamisch?

Der Unterschied spielt wirklich nur für MyISAM eine Rolle, andere Speicher-Engines kümmern sich nicht um den Unterschied.EDIT : Viele Benutzer kommentierten, dass InnoDB sich darum kümmert:link 1 by dampfbetrieben , Link 2 von Kaan .

Bei MyISAM mit Zeilen mit fester Breite gibt es einige Vorteile:

  1. Keine Zeilenfragmentierung:Bei Zeilen mit variabler Breite ist es möglich, einzelne Zeilen in mehrere Abschnitte über die Datendatei aufzuteilen. Dies kann die Festplattensuchvorgänge erhöhen und den Betrieb verlangsamen. Es ist möglich, es mit OPTIMIZE TABLE zu defragmentieren, aber das ist nicht immer praktisch.

  2. Datendatei-Zeigergröße:In MyISAM gibt es ein Konzept eines Datendatei-Zeigers, der verwendet wird, wenn er auf die Datendatei verweisen muss. Dies wird beispielsweise in Indizes verwendet, wenn sie darauf verweisen, wo die Zeile tatsächlich vorhanden ist. Bei Größen mit fester Breite basiert dieser Zeiger auf dem Zeilenoffset in der Datei (dh Zeilen sind 1, 2, 3, unabhängig von ihrer Größe). Bei variabler Breite basiert der Zeiger auf dem Byte-Offset (dh Zeilen können 1, 57, 163 sein). Das Ergebnis ist, dass bei großen Tabellen der Zeiger größer sein muss, was der Tabelle möglicherweise viel mehr Overhead hinzufügt.

  3. Im Falle von Korruption einfacher zu beheben. Da jede Zeile die gleiche Größe hat, ist es viel einfacher, Ihre MyISAM-Tabelle zu reparieren, wenn sie beschädigt wird, sodass Sie nur Daten verlieren, die tatsächlich beschädigt sind. Bei der variablen Breite ist es theoretisch möglich, dass die Zeiger der variablen Breite durcheinander geraten, was zu einer schlechten Datenverarbeitung führen kann.

Der Hauptnachteil der festen Breite besteht nun darin, dass mehr Platz verschwendet wird. Beispielsweise müssen Sie CHAR-Felder anstelle von VARCHAR-Feldern verwenden, sodass am Ende zusätzlicher Platz verbraucht wird.

Normalerweise haben Sie beim Format keine große Auswahl, da es auf der Grundlage des Schemas vorgegeben wird. Es kann sich jedoch lohnen, wenn Sie nur wenige Varchars oder einen einzelnen Blob/Text haben, um zu versuchen, dies zu optimieren. Ziehen Sie zum Beispiel in Betracht, das einzige varchar in ein char umzuwandeln oder das Blob in seine eigene Tabelle aufzuteilen.

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

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

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