„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich eine langsame \"SELECT COUNT(*)...\"-Abfrage mit einer WHERE-Klausel in MySQL beschleunigen?

Wie kann ich eine langsame \"SELECT COUNT(*)...\"-Abfrage mit einer WHERE-Klausel in MySQL beschleunigen?

Veröffentlicht am 12.11.2024
Durchsuche:851

How Can I Speed Up a Slow \

Optimieren von „SELECT COUNT(*)…“ mit der Where-Klausel

Das vorliegende Problem betrifft ein deutlich langsames „SELECT COUNT (*)“-Abfrage in MySQL, auch wenn eine „WHERE“-Klausel angewendet wird. Um dieser Herausforderung zu begegnen, ist es wichtig, den Speichermechanismus von MySQL zu verstehen.

Clustered Primary Keys

InnoDB, die in diesem Fall verwendete Speicher-Engine, verwendet geclusterte Primärschlüssel. Dies bedeutet, dass der Primärschlüssel neben der Datenzeile auf denselben Datenseiten und nicht auf separaten Indexseiten gespeichert wird. Folglich erfordert die Durchführung eines Bereichsscans für einen gruppierten Primärschlüssel das Scannen aller Zeilen, einschließlich ihrer möglicherweise breiten Spaltenwerte. Die betreffende Tabelle enthält eine TEXT-Spalte, was das Leistungsproblem weiter verschärft.

Optimierungsstrategien

Um diese Abfrage zu optimieren, ziehen Sie die folgenden Strategien in Betracht:

  1. Tabelle optimieren: Durch Ausführen von „OPTIMIZE TABLE“ wird sichergestellt, dass die Datenseiten physisch in der richtigen Reihenfolge sortiert werden. Diese Optimierung kann möglicherweise die Leistung von Bereichsscans für geclusterte Primärschlüssel verbessern.
  2. Erstellen Sie einen zusätzlichen Index: Erwägen Sie die Erstellung eines nicht-primären Index ausschließlich für die Spalte „change_event_id“. Dadurch wird eine Kopie dieser Spalte auf Indexseiten erstellt, die im Vergleich zum gruppierten Primärschlüssel deutlich schneller zu scannen ist. Überprüfen Sie den EXPLAIN-Plan nach dem Erstellen des Index, um seine Nutzung zu bestätigen.

Zusätzlicher Vorschlag

Um die Leistung weiter zu verbessern, sollten Sie die Spalte „change_event_id“ in ändern sei „BIGINT UNSIGNED“, wenn es von Null aus inkrementiert. Diese Änderung kann zu geringeren Speicheranforderungen und verbesserter Leistung führen.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3