Bevor Sie sich für MyISAM oder InnoDB entscheiden, müssen Sie beide Speicher-Engines dahingehend überprüfen, wie sie jeweils zwischengespeichert werden
MyISAM
Beim Lesen können die Indizes einer MyISAM-Tabelle einmal aus der .MYI-Datei gelesen und in den MyISAM-Schlüsselcache geladen werden (Größe nach key_buffer_size ). Wie können Sie die .MYD einer MyISAM-Tabelle schneller lesen lassen? Mit diesem:
ALTER TABLE mytable ROW_FORMAT=Fixed;
Ich habe darüber in meinen letzten Beiträgen geschrieben
InnoDB
OK, was ist mit InnoDB? Führt InnoDB Festplatten-E / A für Abfragen aus? Überraschenderweise ja ja !! Sie denken wahrscheinlich, ich bin verrückt danach, das zu sagen, aber es ist absolut wahr, selbst für SELECT-Anfragen . An diesem Punkt fragen Sie sich wahrscheinlich: "Wie in aller Welt führt InnoDB Festplatten-E / A für Abfragen aus?"
Alles geht darauf zurück, dass InnoDB eine ACID- beschwerdepflichtige Transactional Storage Engine ist. Um InnoDB Transactional zu sein, hat es die Unterstützung I
in ACID
, die Isolation ist. Die Technik zur Aufrechterhaltung der Isolation für Transaktionen erfolgt über MVCC, Multiversion Concurrency Control . In einfachen Worten, InnoDB zeichnet auf, wie Daten aussehen, bevor Transaktionen versuchen, sie zu ändern. Wo wird das aufgenommen? In der Systemtabellenbereichsdatei, besser bekannt als ibdata1. Das erfordert Disk - I / O .
VERGLEICH
Welche zufälligen Faktoren bestimmen, wer schneller ist, da sowohl InnoDB als auch MyISAM Festplatten-E / A ausführen?
- Größe der Spalten
- Spaltenformat
- Zeichensätze
- Bereich numerischer Werte (erfordert ausreichend große INTs)
- Zeilen werden blockweise aufgeteilt (Zeilenverkettung)
- Datenfragmentierung durch
DELETEs
undUPDATEs
- Größe des Primärschlüssels (InnoDB verfügt über einen Clustered-Index, für den zwei Schlüsselsuchen erforderlich sind)
- Größe der Indexeinträge
- Die Liste geht weiter...
EPILOG
In einer Umgebung mit starken Lesevorgängen ist es daher möglich, dass eine MyISAM-Tabelle mit einem festen Zeilenformat InnoDB-Lesevorgänge aus dem InnoDB-Pufferpool übertrifft, wenn genügend Daten in die in ibdata1 enthaltenen Rückgängig-Protokolle geschrieben werden, um das Transaktionsverhalten zu unterstützen den InnoDB-Daten auferlegt. Planen Sie Ihre Datentypen, Abfragen und Speicher-Engines sehr sorgfältig. Sobald die Daten wachsen, kann es sehr schwierig werden, Daten zu verschieben.
Übrigens habe ich vor 5 Tagen so etwas geschrieben: Wie ordne ich ein Speicherlimit für mySQL zu?