Die Informationen, die Sie in der Frage zu MyISAM haben, sind genau richtig. Ich möchte jedoch auf Ihre zwei zusätzlichen Fragen eingehen:
LETZTE FRAGE
Laut dem Buch
Kapitel 10:"Speicher-Engines" Seite 196 Absatz 7 sagt:
Basierend auf diesem Absatz wird der alte Datensatz nur dann mit Verknüpfungsdaten überschrieben, wenn die neuen einzufügenden Daten nicht in den zuvor zugewiesenen Block passen. Dies kann zu vielen aufgeblähten Zeilen führen.
ZUSATZFRAGE
Aus meiner vorherigen Antwort würde es viele Blöcke geben, die
- Raumblock
- die Länge des Datensatzes
- die Anzahl der ungenutzten Bytes im Block
- NULL-Wert-Indikator-Flags
- evtl. ein Hinweis auf die Fortsetzung des Datensatzes, falls der Datensatz nicht in den zuvor geschaffenen Platz passte und aufgeteilt werden musste
Solche Datensatzverknüpfungen würden vor jeder Zeile beginnen, in die übergroße Daten eingefügt werden. Dies kann MyISAM-Tabellen .MYD
aufblähen Datei sehr schnell.
VORSCHLÄGE
Das Standard-Zeilenformat eines MyISAM ist Dynamisch. Wenn eine Tabelle dynamisch ist und viele INSERTs, UPDATEs und DELETEs erfährt, müsste eine solche Tabelle mit
optimiert werdenOPTIMIZE TABLE mytable;
Es gibt eine Alternative:Stellen Sie das Zeilenformat der Tabelle auf Fixed um. Auf diese Weise sind alle Zeilen gleich groß. So machen Sie das Zeilenformat fest:
ALTER TABLE mytable ROW_FORMAT=Fixed;
Selbst bei einem festen Zeilenformat muss Zeit aufgewendet werden, um einen verfügbaren Datensatz zu finden, aber die Zeit wäre O (1) Suchzeit (In Laienbegriffen würde es die gleiche Zeit dauern, einen verfügbaren Datensatz zu finden, egal wie viele Zeilen die Tabelle hat oder wie viele gelöschte Zeilen es gibt). Sie könnten diesen Schritt umgehen, indem Sie concurrent_insert wie folgt:
Fügen Sie dies zu my.cnf hinzu
[mysqld]
concurrent_insert = 2
MySQL-Neustart nicht erforderlich. Einfach laufen
mysql> SET GLOBAL concurrent_insert = 2;
Dies würde dazu führen, dass alle INSERTs ans Ende der Tabelle gehen, ohne nach freiem Speicherplatz zu suchen.
Vorteil fester Zeilentabellen
- INSERT, UPDATE und DELETE wären etwas schneller
- SELECT sind 20–25 % schneller
Hier sind einige meiner Beiträge zu SELECT, das schneller ist, wenn Zeilenformate korrigiert werden
May 03, 2012
:Was schneller ist, InnoDB oder MyISAM?Sep 20, 2011
:Das Beste von MyISAM und InnoDBMay 10, 2011
:Welche Auswirkungen auf die Leistung hat die Verwendung von CHAR vs. VARCHAR bei einem Feld mit fester Größe?
Nachteil fester Zeilentabellen
In den meisten Fällen, wenn Sie ALTER TABLE mytable ROW_FORMAT=Fixed;
ausführen , kann die Tabelle um 80-100 % wachsen. Die .MYI
Datei (Indexseiten für die MyISAM-Tabelle) würde ebenfalls mit der gleichen Rate wachsen.
EPILOG
Wenn Sie Geschwindigkeit für MyISAM-Tabellen wollen und mit größeren Tabellen leben können, wären meine alternativen Vorschläge erforderlich. Wenn Sie Speicherplatz für jede MyISAM-Tabelle sparen möchten, lassen Sie das Zeilenformat unverändert (dynamisch). Sie müssen die Tabelle mit OPTIMIZE TABLE mytable;
komprimieren häufiger mit dynamischen Tabellen.