MySQL-Gruppe von sehr langsam

9

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%     
Treach 23.04.2012, 10:32
quelle

5 Antworten

18

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: -

%Vor%

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.

    
rgvcorley 23.04.2012 10:37
quelle
3

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) .

    
Daan 23.04.2012 10:38
quelle
1

versuche dieses:

%Vor%     
IT ppl 23.04.2012 10:38
quelle
1

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.

    
Miguel Angel Cañedo 14.01.2017 02:04
quelle
0

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.

    
Tom van der Woerdt 23.04.2012 10:38
quelle

Tags und Links