In diesem Artikel werden hauptsächlich die Optimierungsmethoden im Zusammenhang mit dem Datentyp in MySQL vorgestellt, einschließlich der Verwendung mehrspaltiger Indizes und anderer verwandter Optimierungsmethoden. Freunde in Not können sich auf
beziehen Typauswahlen, die zur Effizienz beitragen
1. Halten Sie Ihre Daten so klein wie möglich
Eine der grundlegendsten Optimierungen besteht darin, Ihre Daten (und Indizes) auf der Festplatte zu belassen (und so wenig Platz wie möglich im Speicher einnehmen). Dies kann eine enorme Verbesserung bedeuten, da Festplattenlesevorgänge schneller sind und normalerweise weniger Hauptspeicher beanspruchen. Wenn Sie kleinere Spalten indizieren, beansprucht der Index auch weniger Ressourcen.
Sie können die folgenden Techniken verwenden, um die Leistung von Tabellen zu verbessern und den Speicherplatz zu minimieren:
·Verwenden Sie den effizientesten (kleinsten) möglichen Typ. MySQL verfügt über viele Spezialisierungen, die Speicherplatz und Speicher sparen.
·Wenn möglich, verwenden Sie einen kleineren Ganzzahltyp, um die Tabelle kleiner zu machen. Beispielsweise ist MEDIUMINT oft besser als INT.
· Wenn möglich, deklarieren Sie die Spalte als NOT NULL. Es macht alles schneller und Sie sparen ein Bit pro Spalte. Beachten Sie, dass Sie, wenn Sie wirklich NULL in Ihrer Anwendung benötigen, es ohne Frage verwenden sollten. Vermeiden Sie es lediglich, es standardmäßig in allen Spalten zu verwenden.
2. Verwenden Sie Spalten mit fester Länge anstelle von Spalten mit variabler Länge.
Diese Richtlinie ist besonders wichtig für Tabellen, die häufig geändert werden und zur Fragmentierung neigen. Beispielsweise sollten CHAR-Spalten anstelle von VARCHAR-Spalten ausgewählt werden. Der Nachteil besteht darin, dass die Tabelle mehr Platz einnimmt, wenn Spalten mit fester Länge verwendet werden. Wenn Sie sich jedoch die Platzkosten leisten können, ist die Verwendung von Zeilen mit fester Länge viel schneller als die Verwendung von Zeilen mit variabler Länge.
3. Definieren Sie die Spalte als NOT NULL
Dies beschleunigt die Verarbeitung und erfordert weniger Platz. Manchmal vereinfacht es auch Abfragen, da keine Prüfung auf den Sonderfall NULL erforderlich ist.
4. Erwägen Sie die Verwendung einer ENUM-Spalte
Wenn Sie eine Spalte haben, die nur eine begrenzte Anzahl spezifischer Werte enthält, sollten Sie darüber nachdenken, sie in eine ENUM-Spalte umzuwandeln. ENUM-Spaltenwerte können schneller verarbeitet werden, da sie intern als numerische Werte dargestellt werden.
Über BLOB- und TEXT-Typen
1. Vorteile der Verwendung von BLOB- und TEXT-Typen
Es ist möglich, BLOB zum Speichern gepackter oder nicht gepackter Daten in Anwendungsdaten zu verwenden Eine Rückholung, die ursprünglich mehrere Rückholvorgänge erforderte, kann in einem einzigen Rückholvorgang durchgeführt werden. Es ist auch hilfreich beim Speichern von Daten, die nicht einfach durch Standardtabellenstrukturen dargestellt werden können, oder von Daten, die sich im Laufe der Zeit ändern.
2. Mögliche Nachteile der Verwendung von BLOB- und TEXT-Typen
Andererseits haben BLOB-Werte auch ihre eigenen inhärenten Probleme, insbesondere wenn eine große Anzahl von DELETE- oder UPDATE-Vorgängen ausgeführt wird. Das Löschen eines BLOB hinterlässt eine große Lücke in der Tabelle, die später mit einem Datensatz oder möglicherweise mehreren Datensätzen unterschiedlicher Größe gefüllt werden muss.
Vermeiden Sie das Abrufen großer BLOB- oder TEXT-Werte, sofern dies nicht erforderlich ist. Beispielsweise ist eine SELECT *-Abfrage keine gute Idee, es sei denn, Sie sind sicher, dass die WHERE-Klausel die Ergebnisse auf genau die gewünschten Zeilen beschränkt. Dies kann dazu führen, dass sehr große BLOB-Werte ohne Ziel über das Netzwerk verschoben werden. Dies ist eine weitere Situation, in der in einer anderen Spalte gespeicherte BLOB-Identifikationsinformationen nützlich sind. Sie können die Spalte durchsuchen, um die gewünschte Zeile zu ermitteln, und dann den BLOB-Wert aus der qualifizierten Zeile abrufen.
3. Notwendige Richtlinien
Verwenden Sie OPTIMIZE TABLE für Tabellen, die anfällig für Fragmentierung sind.
Tabellen, die stark geändert wurden, insbesondere solche mit Spalten variabler Länge, sind anfällig für Fragmentierung. Fragmentierung ist schlecht, weil dadurch ungenutzter Speicherplatz in den Festplattenblöcken entsteht, in denen die Tabelle gespeichert ist. Mit der Zeit müssen mehr Blöcke gelesen werden, um gültige Zeilen zu erhalten, was die Leistung verringert. Dieses Problem tritt bei jeder Tabelle mit Zeilen variabler Länge auf, bei BLOB-Spalten ist es jedoch problematischer, da deren Größe stark variiert. Die regelmäßige Verwendung von OPTIMIZE TABLE trägt dazu bei, Leistungseinbußen vorzubeugen.
Mehrspaltige Indizes verwenden
Mehrspaltige Indexspalten sind manchmal nützlich. Eine Technik besteht darin, einen Hash-Wert basierend auf anderen Spalten zu erstellen und ihn in einer separaten Spalte zu speichern. Anschließend kann die Zeile durch Suchen nach dem Hash-Wert gefunden werden. Dies funktioniert nur für exakt passende Abfragen. (Hash-Werte sind für Bereichssuchen mit Operatoren wie „558efc9972e968ea825cbc61f23e6bc9=" nicht sinnvoll). In MySQL Version 3.23 und höher können Hashwerte mit der Funktion MD5() generiert werden. Hash-Indizes sind besonders nützlich für BLOB-Spalten. Zu beachten ist, dass der BLOB-Typ in Versionen vor MySQL 3.23.2 nicht indiziert werden konnte. Selbst in Version 3.23.2 oder neuer ist das Finden eines BLOB-Werts mithilfe eines Hashwerts als Identifikationswert schneller als das Durchsuchen der BLOB-Spalte selbst.
BLOB-Werte in einer separaten Tabelle isolieren
In manchen Fällen kann das Verschieben von BLOB-Spalten aus einer Tabelle in eine andere Nebentabelle bestimmte Konsequenzen haben. vorausgesetzt, dass die Tabelle nach dem Herausziehen der BLOB-Spalten in ein Zeilenformat mit fester Länge konvertiert werden kann. Dies reduziert die Fragmentierung in der Haupttabelle und nutzt die Leistungsvorteile von Zeilen fester Länge.
Verwenden Sie die ANALYZE-Prozedur, um Tabellenspalten zu überprüfen
Wenn Sie MySQL 3.23 oder neuer verwenden, sollten Sie PROCEDURE ANALYSE() ausführen, um die Informationen anzuzeigen, die es über die Spalten in der Tabelle liefert
ANALYSE([max elements,[max memory]])
Es untersucht die Ergebnisse Ihrer Abfrage und gibt eine Analyse der Ergebnisse zurück.
max elements (Standard 256) ist die maximale Anzahl unterschiedlicher Werte pro Spalte, die bei der Analyse erkannt werden. Dies wird von ANALYZE verwendet, um zu prüfen, ob der optimale Spaltentyp ein ENUM-Typ sein sollte.
Maximaler Speicher (Standard 8192) ist die maximale Speichermenge, die jeder Spalte zugewiesen werden sollte, wenn die Analyse versucht, alle eindeutigen Werte zu finden.
SELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max elements,[max memory]])
Zum Beispiel:
mysql>SELECT * FROM student PROCEDURE ANALYSE(); mysql>SELECT * FROM student PROCEDURE ANALYSE(16,256);
Die entsprechende Ausgabe enthält eine Spalte mit Empfehlungen zum besten Spaltentyp für jede Spalte in der Tabelle. Das zweite Beispiel fordert PROCEDURE ANALYSE( ) auf, keine ENUM-Typen vorzuschlagen, die mehr als 16 Werte enthalten oder mehr als 256 Bytes beanspruchen (diese Werte können nach Bedarf geändert werden). Ohne eine solche Einschränkung wäre die Ausgabe möglicherweise sehr lang; die Definition von ENUM wäre auch schwer zu lesen.
Anhand der Ausgabe von PROCEDURE ANALYSE( ) werden Sie feststellen, dass Änderungen an der Tabelle vorgenommen werden können, um effizientere Typen zu nutzen. Wenn Sie den Werttyp ändern möchten, verwenden Sie die ALTER TABLE-Anweisung.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Methoden zur Datentypoptimierung in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!