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 Iin 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
DELETEsundUPDATEs
- 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?