MySQL-Optimierungsstrategie (empfohlen)

MySQL-Optimierungsstrategie (empfohlen)

Zusammenfassend:

  1. 1. Berücksichtigen Sie die Leistung beim Entwurf der Datenbank und beim Erstellen von Tabellen
  2. 2. Das Schreiben von SQL muss optimiert werden
  3. 3. Partition, Tabelle und Datenbank

Beim Entwerfen einer Tabelle:

  1. 1. Vermeiden Sie Nullwerte in Feldern. Nullwerte sind schwer abzufragen und zu optimieren und beanspruchen zusätzlichen Indexplatz. Es wird empfohlen, die Standardzahl 0 anstelle von Null zu verwenden.
  2. 2. Versuchen Sie, INT statt BIGINT zu verwenden. Wenn es nicht negativ ist, fügen Sie UNSIGNED hinzu (dadurch verdoppelt sich die Wertekapazität). Natürlich ist es besser, TINYINT, SMALLINT oder MEDIUM_INT zu verwenden.
  3. 3. Verwenden Sie Enumeration oder Integer anstelle des String-Typs
  4. 4. Versuchen Sie, TIMESTAMP anstelle von DATETIME zu verwenden
  5. 5. Verwenden Sie nicht zu viele Felder in einer einzelnen Tabelle. Es wird empfohlen, die Anzahl der Felder auf 20 zu begrenzen.
  6. 6. Verwenden Sie eine Ganzzahl zum Speichern der IP

Index:

  1. 1. Je mehr Indizes, desto besser. Sie müssen Indizes basierend auf der Abfrage erstellen. Erwägen Sie die Erstellung von Indizes für die Spalten, die in den Befehlen WHERE und ORDER BY enthalten sind. Sie können EXPLAIN verwenden, um zu prüfen, ob der Index verwendet wird oder der vollständige Tabellenscan ausgeführt wird.
  2. 2. Vermeiden Sie die Verwendung von NULL-Werten für Felder in der WHERE-Klausel, da die Engine sonst auf die Verwendung von Indizes verzichtet und einen vollständigen Tabellenscan durchführt.
  3. 3. Felder mit sehr spärlicher Werteverteilung sind für die Indizierung nicht geeignet, wie etwa „Geschlecht“-Felder mit nur zwei oder drei Werten.
  4. 4. Erstellen Sie nur einen Präfixindex für Zeichenfelder
  5. 5. Es ist am besten, keine Zeichenfelder als Primärschlüssel zu verwenden
  6. 6. Es werden keine Fremdschlüssel benötigt, Einschränkungen werden vom Programm garantiert
  7. 7. Versuchen Sie, UNIQUE nicht zu verwenden, und lassen Sie das Programm die Einschränkungen sicherstellen
  8. 8. Achten Sie bei der Verwendung mehrspaltiger Indizes auf die Konsistenz der Reihenfolge und Abfragebedingungen und löschen Sie unnötige einspaltige Indizes

Zusammenfassung: Verwenden Sie den geeigneten Datentyp und wählen Sie den geeigneten Index

Das Schreiben von SQL muss optimiert werden:

Verwenden Sie „Limit“, um die Datensätze in den Abfrageergebnissen einzuschränken

Vermeiden Sie „select *“ und listen Sie die Felder auf, nach denen Sie suchen müssen.

Verwenden Sie Verknüpfungen anstelle von Unterabfragen

Aufteilen großer Delete- oder Insert-Anweisungen

Sie können das langsame SQL herausfinden, indem Sie das Protokoll für langsame Abfragen aktivieren

Keine Spaltenoperationen: SELECT id WHERE age + 1 = 10. Jede Operation an der Spalte führt zu einem Tabellenscan, einschließlich Datenbank-Tutorialfunktionen, Berechnungsausdrücke usw. Versuchen Sie beim Abfragen, die Operation rechts neben das Gleichheitszeichen zu verschieben.

Die SQL-Anweisung sollte so einfach wie möglich sein: Eine SQL-Anweisung kann nur auf einer CPU ausgeführt werden; große Anweisungen sollten in kleine Anweisungen aufgeteilt werden, um die Sperrzeit zu verkürzen; eine große SQL-Anweisung kann die gesamte Datenbank blockieren

Schreiben Sie OR in IN um: OR hat eine Effizienz von n, während IN eine Effizienz von log(n) hat. Es wird empfohlen, die Anzahl der INs auf 200 zu begrenzen.

Es sind keine Funktionen oder Trigger erforderlich, um

Vermeiden Sie Abfragen im %xxx-Stil

Verwenden Sie JOIN sparsam

Verwenden Sie zum Vergleich den gleichen Typ, z. B. „123“ und „123“, 123 und 123

Vermeiden Sie nach Möglichkeit die Verwendung der Operatoren != oder <> in der WHERE-Klausel. Andernfalls gibt die Engine den Index auf und führt einen vollständigen Tabellenscan durch.

Für aufeinanderfolgende Werte verwenden Sie BETWEEN statt IN: SELECT id FROM t WHERE num BETWEEN 1 AND 5

Verwenden Sie nicht die gesamte Tabelle für Listendaten. Verwenden Sie LIMIT, um die Daten in Seiten aufzuteilen. Die Anzahl der Seiten sollte nicht zu groß sein.

Motor:

MeinIsAM

Zeilensperren werden nicht unterstützt. Alle Tabellen, die gelesen werden müssen, werden beim Lesen gesperrt, und beim Schreiben werden den Tabellen exklusive Sperren hinzugefügt.

Keine Unterstützung für Transaktionen

Fremdschlüssel werden nicht unterstützt

Unterstützt keine sichere Wiederherstellung nach einem Absturz

Unterstützt das Einfügen neuer Datensätze in die Tabelle, während die Tabelle gelesen und abgefragt wird

Unterstützt die Indizierung der ersten 500 Zeichen von BLOB und TEXT sowie die Volltextindizierung

Unterstützt verzögerte Aktualisierung von Indizes, was die Schreibleistung erheblich verbessert

Für Tabellen, die nicht geändert werden, wird die Komprimierung unterstützt, um den Speicherplatzbedarf erheblich zu reduzieren

InnoDB

Unterstützt Zeilensperren und verwendet MVCC, um hohe Parallelität zu unterstützen

Supportangelegenheiten

Unterstützt Fremdschlüssel

Unterstützt die sichere Wiederherstellung nach einem Absturz

Keine Unterstützung für Volltextindizierung

Im Allgemeinen eignet sich MyISAM für SELECT-intensive Tabellen, während InnoDB für INSERT- und UPDATE-intensive Tabellen geeignet ist.

Partition, Tabelle und Datenbank (Trennung von Lesen und Schreiben)

Oben finden Sie eine ausführliche Erklärung und Integration der vom Herausgeber vorgestellten MySQL-Optimierungsstrategien. Ich hoffe, dass es für alle hilfreich sein wird. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Herausgeber wird Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!

Das könnte Sie auch interessieren:
  • So lösen Sie das Problem der Groß-/Kleinschreibung bei MySQL-Abfragen
  • Detaillierte Erklärung, wie MySQL Phantom-Lesevorgänge löst
  • Detaillierte Erklärung des unbekannten Fehlers 10061 bei der Verwendung von Navicat zur Verbindung mit einer Remote-Linux-MySQL-Datenbank
  • Detaillierte Erläuterung der Vorgänge zum Hinzufügen, Löschen und Ändern der MySQL-Datenbank
  • So fügen Sie mithilfe eines Shell-Skripts einen Index zu MySQL hinzu
  • Verstümmelte Zeichen und Lösungen im MySQL-Zeichensatz
  • MySQL startet langsames SQL und analysiert die Ursachen
  • Führt MySQL die Aktualisierungsanweisung erneut aus, wenn sie dieselben Daten enthält wie die ursprüngliche?
  • Gründe und Lösungen für langsame MySQL-Abfragen, die beim Senden von Daten hängen bleiben
  • Was muss ich tun, wenn ich einen fehlerhaften MySQL-Befehl abbrechen möchte?

<<:  Detaillierte Erläuterung der Nginx-Rewrite-Jump-Anwendungsszenarien

>>:  Vue + Express + Socket realisiert Chat-Funktion

Artikel empfehlen

So konfigurieren Sie den NAT-Modus für virtuelle VMware-Maschinen

In diesem Artikel wird der NAT-Konfigurationsproz...

Ausführliche Erläuterung der Auswirkungen von NULL auf Indizes in MySQL

Vorwort Ich habe viele Blogs gelesen und von viel...

Zusammenfassung einiger gängiger Methoden von JavaScript-Arrays

Inhaltsverzeichnis 1. Einleitung 2. filter() 3. K...

SQL-Funktion zum Zusammenführen eines Feldes

Vor kurzem musste ich alle Felder einer verknüpft...

js, css, html bestimmen die verschiedenen Versionen des Browsers

Verwenden Sie reguläre Ausdrücke, um die IE-Browse...

Beispiel für die Verwendung von Docker zum Erstellen eines ELK-Protokollsystems

Die folgenden Installationen verwenden alle das V...

Tutorial zur Installation und Konfiguration von MySQL 8.0.12 unter Win10

Installation, Konfiguration, Start, Anmeldung und...

Warum gibt es das in JS?

Inhaltsverzeichnis 1. Nachfrage 2. Lösung 3. Die ...

Implementierung der Docker-Bereitstellung des SQL Server 2019 Always On-Clusters

Inhaltsverzeichnis Docker-Bereitstellung Always o...

So geben Sie Speicherplatz unter CentOS 6 oder CentOS 7 frei

Nachfolgend finden Sie die Schnellbefehle zum Fre...