Ich habe die folgende SQL-Abfrage
%Vor%Die Abfrage wird über 11400000 Zeilen ausgeführt und läuft sehr langsam. Es dauert mehr als 3 Minuten zur Ausführung. Wenn ich die Gruppierung nach Teilen entferne, läuft dies unter 1 Sekunde. Warum ist das so?
Die MySQL Server Version ist '5.0.21-community-nt'
%Vor%Versuchen Sie, einen Index anzulegen (Datum, Kundennummer).
Sehen Sie sich das mysql-Handbuch zur Optimierung von Gruppen nach Abfragen an: - Group durch Optimierung
Sie können herausfinden, wie mysql das Ergebnis erzeugt, wenn Sie EXPLAIN
wie folgt verwenden: -
Dies wird Ihnen sagen, welche Indizes (falls vorhanden) mysql verwendet, um die Abfrage zu optimieren. Dies ist sehr praktisch, wenn Sie lernen, welche Indizes für welche Abfragen funktionieren, da Sie versuchen können, einen Index zu erstellen und zu sehen, ob er von mysql verwendet wird. Selbst wenn Sie nicht vollständig verstehen, wie MySQL Aggregatabfragen berechnet, können Sie einen nützlichen Index durch Versuch und Irrtum erstellen.
Ohne zu wissen, wie Ihr Tabellenschema aussieht, ist es schwierig, sicher zu sein, aber es würde wahrscheinlich helfen, wenn Sie einen mehrspaltigen Index für Date
und CustomerID
hinzufügen würden. Das würde MySQL die Mühe ersparen, einen vollständigen Tabellenscan für die GROUP BY
-Anweisung durchzuführen. Also probiere ALTER TABLE sales ADD INDEX (Date,CustomerID)
.
Ich hatte das gleiche Problem, ich habe die Schlüsselfelder in dieselbe Sortierung geändert und das Problem behoben. Felder zum Verknüpfen der Tabellen hatten unterschiedliche Sortierwerte.
Würde das nicht viel schneller sein und dasselbe erreichen?
%Vor% Stellen Sie sicher, dass Sie natürlich einen Index auf Date
setzen. Ich bin mir nicht ganz sicher, aber die Indizierung CustomerID
könnte auch helfen.
Tags und Links mysql performance group-by