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

JavaScript-Webformularfunktion Kommunikation voller praktischer Informationen

1. Einleitung Vorher haben wir über das Front-End...

JavaScript implementiert die Maussteuerung eines frei beweglichen Fensters

In diesem Artikel wird der spezifische JavaScript...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.7.27 winx64

In diesem Artikel wird die Installations- und Kon...

JavaScript-Implementierung von Lupendetails

Inhaltsverzeichnis 1. Rendern 2. Umsetzungsprinzi...

Zehn Erfahrungen bei der Präsentation chinesischer Webinhalte

<br /> Ich habe mich auf die drei Aspekte Te...

JavaScript zum Erreichen eines einfachen Tab-Leisten-Umschaltens

In diesem Artikel wird der spezifische Code für J...

Verwenden Sie CSS-Variablen, um coole und erstaunliche Schwebeeffekte zu erzielen

Kürzlich habe ich auf der Grover-Website eine lus...

Detaillierte Erklärung der Vue-Anmeldung und -Abmeldung

Inhaltsverzeichnis Login-Geschäftsprozess Impleme...

JavaScript zum Erzielen eines Vollbild-Seiten-Scrolleffekts

Nachdem ich mit der Lektüre von JavaScript DOM fe...

Reines CSS, um einen bewölkten Wettersymboleffekt zu erzielen

Wirkung Die Wirkung ist wie folgt ​ Umsetzungside...

10 hervorragende Web-UI-Bibliotheken/Frameworks

1. IT Mill-Toolkit IT Mill Toolkit ist ein Open-S...

Front-End-JavaScript-Funktionsprinzip

Inhaltsverzeichnis 1. Was ist eine JavaScript-Eng...

Detaillierte Erklärung der Linux-RPM- und Yum-Befehle und -Verwendung

RPM-Paketverwaltung Ein Verpackungs- und Installa...