Ich habe kürzlich etwas über MySQL-Optimierung gelernt. In der Spalte „MySQL-Tutorial“ wird die Optimierung von Datentypen und Schemata vorgestellt.
1. Wählen Sie optimierte Datentypen
können dabei helfen, den Datentyp zu bestimmen:
Der kleinste Datentyp, der Daten korrekt speichern kann, sollte so oft wie möglich verwendet werden, solange er ausreicht. Dies beansprucht weniger Festplatte, Speicher und Cache und nimmt weniger Zeit für die Verarbeitung in Anspruch.
Wenn zwei Datentypen ein Feld speichern können, ist die Wahl des einfacheren oft die beste Wahl. Zum Beispiel Ganzzahlen und Zeichenfolgen, da die Operationskosten von Ganzzahlen geringer sind als die von Zeichen. Wenn Sie also zwischen beiden wählen, führt die Auswahl von Ganzzahlen normalerweise zu einer besseren Leistung.
Wenn eine Spalte NULL sein kann, muss für MySQL mehr Arbeit in Bezug auf die Indizierung und den Wertevergleich geleistet werden. Obwohl die Auswirkungen auf die Leistung nicht groß sind, sollte dies versucht werden Vermeiden Sie es so weit wie möglich, NULL zu entwerfen.
1.1 Integer-Typ
Der Integer-Typ und der belegte Platz sind wie folgt:SMALLINT | ||||||||||||||||||||||||||
MEDIUMINT | ||||||||||||||||||||||||||
INT | ||||||||||||||||||||||||||
BIGINT | ||||||||||||||||||||||||||
DOPPELT | 8 | Negative Zahlen : -1.79e+308 ~ -2,22 E-308; Genaue Berechnung | |
---|---|---|---|
Der von DECIMAL belegte Platz hängt von der angegebenen Genauigkeit ab, zum Beispiel DECIMAL(M,D): | M ist die maximale Länge der gesamten Zahl, der Wertebereich ist [1, 65] und der Standardwert Wert ist 10; | D Es ist die Länge nach dem Komma, der Wertebereich ist [0, 30] und D | |
Anzahl der Zahlen | Speicherplatz belegt (Byte) | ||
1, 2 | 1 | 3, 4 |
DECIMAL(18, 9): Die Länge des ganzzahligen Teils beträgt 9 und belegt 4 Bytes. Die Länge des Dezimalteils beträgt 9 und belegt 4 Bytes. Gleichzeitig werden durch Hinzufügen von 1 Byte für den Dezimalpunkt insgesamt 9 Bytes belegt. | |
---|---|
1.3 String-Typ | Die am häufigsten verwendeten String-Typen sind VARCHAR und CHAR. |
String mit variabler Länge | werden 1 oder 2 zusätzliche Bytes zum Aufzeichnen der Länge des Strings verwendet. Wenn die maximale Länge 255 nicht überschreitet, ist nur 1 Byte zum Aufzeichnen der Länge erforderlich , 2 Bytes. VARCHARsanwendbare Szenarien | :
Die maximale Länge ist viel größer als die durchschnittliche Länge; | Die Spalten werden weniger aktualisiert, um Fragmentierung zu vermeiden; |
CHAR | ist eine
in
binärin Zeichen gespeichert wird. Dies führt auch dazu, dass Daten vom Typ BLOB nicht das Konzept eines Zeichensatzes haben und nicht nach Zeichen sortiert werden können, während der Typ TEXT das Konzept eines Zeichensatzes hat und nach Zeichen sortiert werden kann. Die Verwendungsszenarien beider werden auch durch das Speicherformat bestimmt. Beim Speichern von Binärdaten wie Bildern sollte BLOB verwendet werden, und beim Speichern von Texten wie Artikeln sollte der Typ TEXT verwendet werden. 1.4 Datums- und UhrzeittypenDie minimale Zeitgranularität, die in MySQL gespeichert werden kann, beträgt Sekunden. Zu den häufig verwendeten Datumstypen gehören DATETIME und TIMESTAMP.
Zeitzonenkonzept
DATETIMETIMESTAMP von 1970 Die Anzahl der Sekunden seit Mitternacht am 1. Januar des Jahres4hat
Der von TIMESTAMP angezeigte Wert hängt von der Zeitzone ab, was bedeutet, dass der abgefragte Wert in verschiedenen Zeitzonen unterschiedlich ist. Zusätzlich zu den oben aufgeführten Unterschieden verfügt TIMESTAMP auch über ein spezielles Attribut. Wenn beim Einfügen und Aktualisieren der Wert der ersten TIMESTAMP-Spalte nicht angegeben wird, wird der Wert dieser Spalte auf die aktuelle Zeit gesetzt.
Wir sollten versuchen, TIMESTAMP während des Entwicklungsprozesses zu verwenden, vor allem, weil seine Speicherplatzgröße nur halb so groß ist wie die von DATETIME und seine Speicherplatzeffizienz höher ist.
Was wäre, wenn wir Datum und Uhrzeit sekundengenau speichern möchten? Da MySQL dies nicht bereitstellt, können wir BIGINT verwenden, um Zeitstempel auf Mikroebene zu speichern, oder DOUBLE, um den Dezimalteil nach Sekunden zu speichern.
Im Allgemeinen sind Ganzzahlen die beste Wahl für Bezeichner, vor allem weil sie einfach und schnell zu berechnen sind und AUTO_INCREMENT verwenden können.
Einfach ausgedrückt ist Normalform die Ebene eines bestimmten Designstandards, dem die Tabellenstruktur einer Datentabelle entspricht. In der ersten Normalform sind Attribute untrennbar miteinander verbunden. Die vom aktuellen RDBMS-System erstellten Tabellen stimmen alle mit der ersten Normalform überein. Die zweite Normalform eliminiert die teilweise Abhängigkeit nicht-primärer Attribute von Codes (die als Primärschlüssel aufgefasst werden können). Die dritte Normalform eliminiert die transitive Abhängigkeit nicht-primärer Attribute von Codes. Für eine spezifische Einführung können Sie diese Antwort auf Zhihu (https://www.zhihu.com/question/24696366/answer/29189700) lesen.
StrengnormalisiertIn der Datenbank erscheinen alle Sachdaten nur einmal Es wird keine Datenredundanz geben und die Vorteile, die dies mit sich bringen kann, sind:
besteht darin, dass keine Zuordnung erforderlich ist und die Daten redundant gespeichert werden. In praktischen Anwendungen kommt es nicht zu einer vollständigen Normalisierung oder vollständigen Denormalisierung. Oft ist die Verwendung eines teilweise normalisierten Schemas die beste Wahl. Bezüglich des Datenbankdesigns habe ich diesen Absatz im Internet gesehen, und Sie können ihn spüren.
Das Datenbankdesign sollte in drei Bereiche unterteilt werden:
Erster Bereich: Ich habe gerade mit dem Datenbankdesign begonnen und habe die Bedeutung von Paradigmen noch nicht vollständig verstanden. Das zu diesem Zeitpunkt auftretende Anti-Paradigma-Design wird im Allgemeinen Probleme verursachen.Cache-TabelleZweite Ebene: Wenn Sie auf Probleme stoßen und diese lösen, verstehen Sie nach und nach die wahren Vorteile des Paradigmas, sodass Sie schnell eine Datenbank mit geringer Redundanz und hoher Effizienz entwerfen können.
Der dritte Bereich: Nach N Jahren Training werden Sie definitiv die Grenzen des Paradigmas erkennen. Brechen Sie zu diesem Zeitpunkt das Paradigma und entwerfen Sie einen vernünftigeren Anti-Paradigma-Teil.
Das Paradigma ist wie die Bewegungen in der Kampfkunst. Anfänger, die versuchen, den Bewegungen nicht zu folgen, werden nur in Verlegenheit sterben. Schließlich sind die Tricks die Essenz, die von den Meistern zusammengefasst wird. Wenn Sie Ihre Kampfkünste verbessern und die Bewegungen beherrschen, werden Sie unweigerlich die Grenzen der Bewegungen entdecken und sie entweder vergessen oder Ihre eigenen entwickeln.
Solange Sie hart arbeiten und noch ein paar Jahre durchhalten, können Sie immer den zweiten Zustand erreichen und werden immer das Gefühl haben, dass das Paradigma ein Klassiker ist. Zu diesem Zeitpunkt sind diejenigen, die die Beschränkungen des Paradigmas schnell durchbrechen können, ohne sich zu sehr auf das Paradigma zu verlassen, von Natur aus Experten.
4. Cache-Tabelle und ZusammenfassungstabelleZusätzlich zum oben erwähnten Anti-Paradigma und der Speicherung redundanter Daten in der Tabelle können wir auch eine völlig unabhängige Zusammenfassungstabelle oder Cache-Tabelle erstellen, um den Anforderungen des Abrufs gerecht zu werden.
bezieht sich auf eine Tabelle, die Daten speichert, die aus anderen Tabellen im Schema abgerufen werden können, also logisch redundante Daten. Die
Zusammenfassungstabellebezieht sich auf das Speichern nicht redundanter Daten, die durch Aggregieren von Daten mithilfe von Anweisungen wie GROUP BY berechnet werden. Cache-Tabellen können verwendet werden, um Such- und Abrufanweisungen zu optimieren. Dazu gehört die Verwendung verschiedener Speicher-Engines für Cache-Tabellen. Beispielsweise verwendet die Haupttabelle InnoDB, während die Cache-Tabelle zum Abrufen verwendet werden kann ein kleinerer Index Nimmt Platz ein. Sie können die Cache-Tabelle sogar in ein spezielles Suchsystem wie Lucene einfügen. Mit der Übersichtstabelle sollen
die hohen Kosten vermieden werden, die durch die Echtzeitberechnung statistischer Werte entstehen. Zum einen müssen die meisten Daten in der Tabelle gescannt werden, zum anderen Es werden bestimmte Indizes eingerichtet, die sich auf den UPDATE-Vorgang auswirken. Um beispielsweise die Anzahl der WeChat-Momente in den letzten 24 Stunden abzufragen, können Sie jede Stunde die gesamte Tabelle scannen und nach der Statistik einen Datensatz in die Zusammenfassungstabelle schreiben. Bei der Abfrage müssen Sie nur die letzten 24 Datensätze in der Zusammenfassung abfragen table statt every Bei jeder Abfrage wird die gesamte Tabelle nach Statistiken durchsucht.Bei der Verwendung von Cache-Tabellen und Übersichtstabellen müssen wir abhängig von unseren Anforderungen entscheiden, ob wir „Daten in Echtzeit verwalten“ oder „regelmäßig neu erstellen“ möchten. Im Vergleich zur Echtzeitwartung kann eine regelmäßige Rekonstruktion mehr Ressourcen einsparen und eine geringere Tabellenfragmentierung verursachen. Während des Umbaus müssen wir weiterhin sicherstellen, dass die Daten während des Betriebs verfügbar sind, was durch „Schattentabelle
“ erreicht werden muss. Erstellen Sie eine Schattentabelle hinter der realen Tabelle und wechseln Sie nach dem Ausfüllen der Daten die Schattentabelle und die Originaltabelle durch eine atomare Umbenennungsoperation.Wenn MySQL die ALTER TABLE-Operation ausführt, erstellt es häufig eine neue Tabelle, checkt dann die Daten aus der alten Tabelle aus, fügt sie in die neue Tabelle ein und löscht dann die alte Wenn die Tabelle sehr groß ist, dauert dies lange und führt zu einer Unterbrechung des MySQL-Dienstes. Um eine Dienstunterbrechung zu vermeiden, können Sie normalerweise zwei Techniken verwenden:
Aber nicht alle ALTER TABLE-Vorgänge führen zu einer Tabellenrekonstruktion Wenn Sie beispielsweise den Standardwert eines Felds ändern, führt die Verwendung von MODIFY COLUMN zu einer Tabellenrekonstruktion, während die Verwendung von ALTER COLUMN keine Tabellenrekonstruktion verursacht schnell. . Dies liegt daran, dass bei der Änderung des Standardwerts durch ALTER COLUMN direkt die .frm-Datei der vorhandenen Tabelle (in der der Standardwert des Felds gespeichert wird) geändert wird, ohne dass die Tabelle neu erstellt werden muss.
Weitere verwandte kostenlose Lernempfehlungen: MySQL-Tutorial(Video)
Das obige ist der detaillierte Inhalt vonDatentyp- und Schemaoptimierung in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!