Optimierung für langsame „SELECT COUNT(*)“-Abfrage in MySQL
Bei der Abfrage großer Tabellen kann es trotz der Anwesenheit von zu langsamer Leistung kommen eine WHERE-Klausel. Lassen Sie uns einen konkreten Fall analysieren, in dem eine „SELECT COUNT(*)“-Abfrage mit einem Bereichskriterium übermäßig viel Zeit in Anspruch nimmt.
Die Erklärung von „EXPLAIN“ deutet darauf hin, dass ein Bereichsscan stattfindet. Die Leistungsdiskrepanz zwischen der vollständigen Zählung und der gefilterten Zählung bleibt jedoch ungeklärt.
Bei der Untersuchung der Tabellendefinition stellen wir fest, dass die Spalte „change_event_id“ als Primärschlüssel dient, der in geclusterter Form gespeichert wird. Dies bedeutet, dass die Primärschlüsselwerte zusammen mit den Daten auf denselben Festplattenseiten gespeichert werden. Daher müssen bei Bereichsscans für den Primärschlüssel alle Datenseiten durchgelesen werden.
Um die Leistung zu verbessern, sollten Sie die folgenden Strategien in Betracht ziehen:
Darüber hinaus wird empfohlen, die Spalte „change_event_id“ in „bigint unsigned“ zu ändern, falls dies der Fall ist Inkrementierung von Null. Dadurch wird sichergestellt, dass größere Werte ohne Überlauf gespeichert werden können.
Durch die Implementierung dieser Optimierungen sollte sich die Leistung der Abfrage „SELECT COUNT(*)“ mit dem Bereichskriterium deutlich verbessern, sodass sie mit der vollständigen Anzahl vergleichbar ist .
Das obige ist der detaillierte Inhalt vonWie optimiert man eine langsame „SELECT COUNT(*)“-Abfrage, die einen Bereichsscan für den Primärschlüssel in MySQL beinhaltet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!