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

MySQL 8.0.12 Installations- und Nutzungs-Tutorial

Das Installations- und Verwendungstutorial für My...

So legen Sie mit CSS eine Hintergrundunschärfe fest

Beim Erstellen einiger Seiten müssen wir häufig H...

30 kostenlose hochwertige englische Ribbon-Schriftarten

30 kostenlose englische Ribbon-Schriftarten in hoh...

Docker erstellt CMS-On-Demand-System mit Player-Funktion

Inhaltsverzeichnis Text 1. Maschine vorbereiten 2...

So installieren Sie Mysql5.7 in Centos6

Umfeld Centos 6.6 MySQL 5.7 Installieren Falls da...

MySQL-Datenbanktabelle und Datenbankpartitionierungsstrategie

Lassen Sie uns zunächst darüber sprechen, warum w...

So installieren und implementieren Sie einen Gitlab-Server auf CentOS7

Ich verwende hier das 64-Bit-System CentOS 7. Ich...

Tutorial zur Installation und Konfiguration der Centos7-MySQL-Datenbank

1. Systemumgebung Die Systemversion nach dem Yum-...

MySQL-Cursor-Prinzip und Analyse von Anwendungsbeispielen

Dieser Artikel erläutert anhand von Beispielen di...

Docker erstellt Redis5.0 und mountet Daten

Inhaltsverzeichnis 1. Einfaches Einbinden persist...

So konfigurieren Sie Openbox für den Linux-Desktop (empfohlen)

Dieser Artikel ist Teil einer Sonderserie zu den ...