Heim >Datenbank >MySQL-Tutorial >Warum sind meine „SELECT COUNT(*)'-Abfragen in der Tabelle „change_event' so langsam?

Warum sind meine „SELECT COUNT(*)'-Abfragen in der Tabelle „change_event' so langsam?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-31 01:40:02398Durchsuche

Why are my

Bekämpfung langsamer „SELECT COUNT(*)“-Abfragen in MySQL

Ihre Abfrage in der Tabelle „change_event“, wobei Zeilen gezählt werden, die eine bestimmte change_event_id überschreiten kommt es zu erheblichen Verzögerungen. Aber warum? Lassen Sie uns mögliche Ursachen untersuchen.

Enthüllung des Verhaltens von InnoDB

Die InnoDB-Engine von MySQL verwendet geclusterte Primärschlüssel, was bedeutet, dass der Primärschlüssel neben Zeilendaten in Datenseiten gespeichert wird als separate Indexseiten. Daher müssen bei Bereichsscans wie Ihrem alle potenziell breiten Zeilen in Datenseiten gescannt werden. Dieser Faktor wird durch die Spalte xml_diff der Tabelle, einen TEXT-Datentyp, der die Verarbeitung weiter verlangsamt, noch verschärft.

Optimierungsstrategien

Um die Abfrage zu beschleunigen, sind zwei Ansätze eine Überlegung wert :

  • Tabelle optimieren: Dieser Befehl ordnet Datenseiten in sortierter Reihenfolge neu und verbessert so möglicherweise die Effizienz von Bereichsscans.
  • Zusätzlichen Index erstellen: Durch die Einrichtung eines nicht-primären Index ausschließlich für die Spalte „change_event_id“ wird eine Kopie dieser Spalte auf den Indexseiten erstellt. Dieser Index kann erheblich schneller gescannt werden als Datenseiten. Überprüfen Sie den Explain-Plan nach der Erstellung, um seine Verwendung zu bestätigen.

Zusätzlicher Tipp:

Um die Leistung weiter zu verbessern, sollten Sie die Spalte „change_event_id“ in „bigint unsigned“ ändern. Dieser Schritt verhindert negative Werte und kann auch die Verarbeitung rationalisieren.

Das obige ist der detaillierte Inhalt vonWarum sind meine „SELECT COUNT(*)'-Abfragen in der Tabelle „change_event' so langsam?. 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