Bitte beziehen Sie sich auf diese Beiträge:
Tipps, um Ihre Daten so klein wie möglich zu halten:
Entwerfen Sie Ihre Tabellen so, dass ihr Speicherplatz auf der Festplatte minimiert wird. Dies kann zu enormen Verbesserungen führen, indem die Datenmenge reduziert wird, die auf die Festplatte geschrieben und von dieser gelesen wird. Kleinere Tabellen benötigen normalerweise weniger Hauptspeicher, während ihr Inhalt während der Ausführung der Abfrage aktiv verarbeitet wird. Jede Speicherplatzreduzierung für Tabellendaten führt auch zu kleineren Indizes, die schneller verarbeitet werden können.
MySQL unterstützt viele verschiedene Speicher-Engines (Tabellentypen) und Zeilenformate. Für jede Tabelle können Sie entscheiden, welche Speicher- und Indizierungsmethode verwendet werden soll. Wenn Sie das richtige Tabellenformat für Ihre Anwendung auswählen, können Sie einen großen Leistungsgewinn erzielen.
Mit den hier aufgeführten Techniken können Sie eine bessere Leistung für eine Tabelle erzielen und den Speicherplatz minimieren: - Verwenden Sie die effizientesten (kleinsten) Datentypen, die möglich sind. MySQL verfügt über viele spezielle Typen, die Speicherplatz und Speicherplatz sparen. Verwenden Sie beispielsweise nach Möglichkeit die kleineren Ganzzahltypen, um kleinere Tabellen zu erhalten. MEDIUMINT ist oft die bessere Wahl als INT, da eine MEDIUMINT-Spalte 25% weniger Speicherplatz benötigt.
Deklarieren Sie Spalten nach Möglichkeit als NICHT NULL. Es macht alles schneller und Sie sparen ein Bit pro Spalte. Wenn Sie in Ihrer Anwendung wirklich NULL benötigen, sollten Sie es auf jeden Fall verwenden. Vermeiden Sie es einfach, es standardmäßig in allen Spalten zu haben.
Wenn Sie für MyISAM-Tabellen keine Spalten variabler Länge (VARCHAR-, TEXT- oder BLOB-Spalten) haben, wird ein Zeilenformat mit fester Größe verwendet.
InnoDB-Tabellen verwenden ein kompaktes Speicherformat. In früheren Versionen von MySQL als 5.0.3 enthalten InnoDB-Zeilen einige redundante Informationen, z. B. die Anzahl der Spalten und die Länge jeder Spalte, selbst für Spalten mit fester Größe. Standardmäßig werden Tabellen im kompakten Format (ROW_FORMAT = COMPACT) erstellt. Durch das Vorhandensein des kompakten Zeilenformats wird der Speicherplatz in den Zeilen um etwa 20% verringert, wodurch die CPU-Auslastung für einige Vorgänge erhöht wird. Wenn Ihre Arbeitslast typisch ist und durch die Cache-Trefferquote und die Festplattengeschwindigkeit begrenzt ist, ist sie wahrscheinlich schneller. Wenn es ein seltener Fall ist, der durch die CPU-Geschwindigkeit begrenzt ist, ist er möglicherweise langsamer.
Das kompakte InnoDB-Format ändert auch, wie CHAR-Spalten mit UTF-8-Daten gespeichert werden. Mit ROW_FORMAT = REDUNDANT belegt ein UTF-8 CHAR (N) 3 × N Bytes, vorausgesetzt, die maximale Länge eines UTF-8-codierten Zeichens beträgt drei Bytes. Viele Sprachen können hauptsächlich mit Einzelbyte-UTF-8-Zeichen geschrieben werden, sodass eine feste Speicherlänge häufig Speicherplatz verschwendet. Mit dem Format ROW_FORMAT = COMPACT weist InnoDB diesen Spalten eine variable Speichermenge im Bereich von N bis 3 × N Byte zu, indem bei Bedarf nachfolgende Leerzeichen entfernt werden. Die minimale Speicherlänge wird als N Byte beibehalten, um in typischen Fällen direkte Aktualisierungen zu ermöglichen.
Der Primärindex einer Tabelle sollte so kurz wie möglich sein. Dies macht die Identifizierung jeder Zeile einfach und effizient
Erstellen Sie nur die Indizes, die Sie wirklich benötigen. Indizes sind gut zum Abrufen, aber schlecht, wenn Sie Daten schnell speichern müssen. Wenn Sie auf eine Tabelle zugreifen, indem Sie hauptsächlich nach einer Kombination von Spalten suchen, erstellen Sie einen Index für diese. Der erste Teil des Index sollte die am häufigsten verwendete Spalte sein. Wenn Sie bei der Auswahl aus der Tabelle immer viele Spalten verwenden, sollte die erste Spalte im Index diejenige mit den meisten Duplikaten sein, um eine bessere Komprimierung des Index zu erzielen.
Unter bestimmten Umständen kann es vorteilhaft sein, eine Tabelle, die sehr oft gescannt wird, in zwei Teile zu teilen. Dies gilt insbesondere dann, wenn es sich um eine Tabelle mit dynamischem Format handelt und eine kleinere Tabelle mit statischem Format verwendet werden kann, mit der beim Scannen der Tabelle die relevanten Zeilen gefunden werden können.