Langsame COUNT(*)-Abfrage in MySQL mit Where-Klausel
Beim Umgang mit trägen MySQL-Abfragen mit COUNT(*) das zugrunde liegende verstehen Faktoren sind von größter Bedeutung. In diesem speziellen Fall ist die lange Ausführungszeit nicht sofort aus der Abfrage selbst oder der EXPLAIN-Anweisung ersichtlich.
Verstehen des Problems
Die betreffende Tabelle, change_event, verfügt über einen gruppierten Primärschlüssel in der Spalte „change_event_id“. In InnoDB werden gruppierte Primärschlüssel zusammen mit den Daten auf den Datenseiten gespeichert, im Gegensatz zu nicht gruppierten Indizes, die sich auf separaten Indexseiten befinden.
Das Problem von Bereichsscans auf gruppierten Primärschlüsseln
Die vorgestellte Abfrage führt einen Bereichsscan für den gruppierten Primärschlüssel durch, wobei ein erheblicher Teil der Tabelle gescannt werden muss. Dies kann zeitaufwändig sein, da die Datenseiten möglicherweise nicht physisch in sortierter Reihenfolge gespeichert werden, was zu zusätzlichen E/A-Vorgängen führt.
Potenzielle Lösungen
Um dies zu optimieren Abfrage, erwägen Sie die Implementierung einer oder beider der folgenden Strategien:
Zusätzlicher Hinweis:
Erwägen Sie, die Spalte „change_event_id“ in „BIGINT UNSIGNED“ zu ändern, wenn es sich tatsächlich um eine automatisch inkrementierende Spalte handelt beginnend bei Null. Dies würde potenzielle Probleme mit einem vorzeichenbehafteten Ganzzahlüberlauf verhindern.
Das obige ist der detaillierte Inhalt vonWarum ist meine COUNT(*)-Abfrage mit einer WHERE-Klausel in MySQL langsam?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!