Häufige Ursachen und Lösungen für langsame MySQL-SQL-Anweisungen

Häufige Ursachen und Lösungen für langsame MySQL-SQL-Anweisungen

1. Langsame Abfrage aufgrund fehlenden oder ungültigen Indexes

Wenn Sie in einer Tabelle mit mehreren zehn Millionen Daten eine nicht indizierte Spalte als Abfragebedingung verwenden, wird die Abfrage in den meisten Fällen sehr zeitaufwändig sein. Diese Abfrage ist zweifellos eine langsame SQL-Abfrage. Daher ist es bei Abfragen mit großen Datenmengen notwendig, entsprechende Indizes zu erstellen, um die Abfragen zu optimieren.

Obwohl Indizes häufig erstellt werden, können sie in bestimmten Szenarien dennoch fehlschlagen. Daher sind Indexfehler auch eine der Hauptursachen für langsame Abfragen.

2. Sperren Warten

Zu den häufig verwendeten Speicher-Engines zählen InnoDB und MyISAM. Erstere unterstützt Zeilensperren und Tabellensperren, während letztere nur Tabellensperren unterstützt.

Wenn Datenbankoperationen basierend auf Tabellensperren implementiert werden, stellen Sie sich vor, dass, wenn eine Auftragstabelle beim Aktualisieren gesperrt werden muss, eine große Anzahl anderer Datenbankoperationen (einschließlich Abfragen) sich in einem Wartezustand befinden, was die Parallelitätsleistung des Systems ernsthaft beeinträchtigt.

Derzeit ist die von der InnoDB-Speicher-Engine unterstützte Zeilensperre besser für Szenarien mit hoher Parallelität geeignet. Beim Einsatz der Speicher-Engine InnoDB muss allerdings besonders auf die Möglichkeit geachtet werden, dass Zeilensperren zu Tabellensperren aufgewertet werden. Bei Stapelaktualisierungsvorgängen werden Zeilensperren wahrscheinlich zu Tabellensperren aufgewertet.

MySQL geht davon aus, dass die Effizienz der Transaktionsausführung abnimmt, wenn eine große Anzahl von Zeilensperren für eine Tabelle verwendet wird, was dazu führen kann, dass andere Transaktionen lange warten müssen und es zu mehr Sperrkonflikten kommt, was wiederum zu einer ernsthaften Leistungsverschlechterung führt. Daher rüstet MySQL Zeilensperren auf Tabellensperren auf. Darüber hinaus sind Zeilensperren Sperren, die auf Indizes basieren. Wenn der bedingte Index während eines Aktualisierungsvorgangs fehlschlägt, wird die Zeilensperre in eine Tabellensperre umgewandelt.

Daher führen Datenbankoperationen, die auf Tabellensperren basieren, dazu, dass SQL blockiert wird und wartet, was sich wiederum auf die Ausführungsgeschwindigkeit auswirkt. In einigen Fällen, in denen Aktualisierungsvorgänge (Einfügen\Aktualisieren\Löschen) größer oder gleich den Lesevorgängen sind, empfiehlt MySQL nicht die Verwendung der MyISAM-Speicher-Engine.

Neben Sperrupgrades verfügen Zeilensperren im Vergleich zu Tabellensperren über eine feinere Granularität und verbesserte Parallelitätsfunktionen, bringen jedoch auch neue Probleme mit sich, nämlich Deadlocks. Achten Sie daher bei der Verwendung von Zeilensperren darauf, Deadlocks zu vermeiden.

3. Unangemessene SQL-Anweisungen

Die Verwendung ungeeigneter SQL-Anweisungen ist auch eine der häufigsten Ursachen für langsames SQL. Sie sind beispielsweise daran gewöhnt, die SQL-Anweisungen <SELECT *> und <SELECT COUNT(*)> zu verwenden, in großen Datentabellen Paging-Abfragen mit <LIMIT M,N> zu verwenden und nicht indizierte Felder zu sortieren.

Dies sind alle Wissenspunkte, die dieses Mal vorgestellt wurden. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • So lösen Sie das Problem einer langsamen SQL-Abfrage in MySQL, die zum Absturz der gesamten Website führt
  • MySQL startet langsames SQL und analysiert die Ursachen
  • Detaillierte Erläuterung der Verwendung von MySQL-Profilen zur Analyse von langsamem SQL (Group Left Join ist effizienter als Unterabfrage)
  • Lassen Sie uns ausführlich über die Richtung der langsamen SQL-Optimierung in MySQL sprechen

<<:  Virtuelle Maschinen zwischen VMware Workstation und vSphere migrieren (Bild und Text)

>>:  Beispiel für die Konvertierung eines flachen JavaScript-Arrays in eine Baumstruktur

Artikel empfehlen

Details und Beispielcode der MySQL-Replikationstabelle

Detaillierte Erklärung der MySQL-Replikationstabe...

So installieren und konfigurieren Sie Redis in CentOS7

Einführung Es ist nicht nötig, Redis im Detail vo...

So laden Sie Flash in HTML (2 Implementierungsmethoden)

Erste Methode : CSS Code: Code kopieren Der Code l...

Analyse des Uniapp-Einsteiger-NVUE-Klettergrubenrekords

Inhaltsverzeichnis Vorwort Hallo Welt Bild Rahmen...

Analyse des Prinzips der MySQL-Indexlängenbeschränkung

Dieser Artikel stellt hauptsächlich die Analyse d...

JavaScript zum Erzielen eines Digitaluhreffekts

In diesem Artikelbeispiel wird der spezifische Ja...

Bringen Sie Ihnen bei, wie Sie die Zeigerposition in Javascript erhalten

Die Methode zum Abrufen der Zeigerposition in Jav...

Detaillierte Erklärung zur Installation von PHP7 unter Linux

Wie installiere ich PHP7 unter Linux? 1. Installi...

So exportieren Sie die MySQL-Tabellenstruktur nach Excel

Die Voraussetzungen sind wie folgt Exportieren Si...

MySQL-Abfragemethode mit mehreren Bedingungen

MySQL-Abfrage mit mehreren Bedingungen Umgebung: ...

Kopieren Sie den Inhalt einer Datei an das Ende einer anderen Datei in Linux

Problembeschreibung: Der Inhalt der Datei 11 laut...

1 Minute Vue implementiert Rechtsklickmenü

Inhaltsverzeichnis Rendern Installieren Code-Impl...