Heim  >  Artikel  >  Datenbank  >  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?

DDD
DDDOriginal
2024-10-31 02:10:02363Durchsuche

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 „TABELLE OPTIMIEREN“ wird sichergestellt, dass die Datenseiten physisch in der richtigen Reihenfolge sortiert sind. Diese Optimierung kann möglicherweise die Leistung von Bereichsscans für gruppierte 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 Erklärungsplan 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“ ändern muss „BIGINT UNSIGNED“ sein, wenn es von Null aus inkrementiert wird. Diese Änderung kann zu einem geringeren Speicherbedarf und einer verbesserten Leistung führen.

Das obige ist der detaillierte Inhalt vonWie kann ich eine langsame \"SELECT COUNT(*)...\"-Abfrage mit einer WHERE-Klausel in MySQL beschleunigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn