Ich habe eine Tabellenstruktur wie folgt aus:bekommen viele gruppiert Werte von mysql
CREATE TABLE `test` (
`a` tinyint(3) unsigned DEFAULT 0,
`b` tinyint(3) unsigned DEFAULT 0,
`c` tinyint(3) unsigned DEFAULT 0,
`d` tinyint(3) unsigned DEFAULT 0,
`e` tinyint(3) unsigned DEFAULT 0
);
Dies hat etwa 30 Spalten mit einigen Spalten, die Werte von 0 bis 200 haben (a, b) und einige haben nur 5 Werte (0,1,2,3,4) (Spalte cd). Es gibt ungefähr. 120.000 Zeilen in der Tabelle.
Um die Anzahl der Artikel pro Zeile anzeigen verwende ich eine Abfrage für jede Spalte:
select a, count(*) FROM test group by a;
select b, count(*) FROM test group by b;
select c, count(*) FROM test group by c;
select d, count(*) FROM test group by d;
select e, count(*) FROM test group by e;
Das Problem dabei ist, dass es 30 Anfragen ausgelöst wird (eine pro Spalte) und im Grunde den gleichen Satz geht über von Daten jedes Mal.
Gibt es einen besseren Weg, dies zu tun?
Ich habe versucht, mit GROUP BY WITH ROLLUP, aber dies führt zu einer massiven Ergebnismenge, die langsamer als jede einzelne Abfrage verarbeitet wird.
Sie können eine Auswahl der Daten auf SQLfiddle anzuzeigen: http://sqlfiddle.com/#!2/a9fd8/1
Everytime 'Using temporary; Mit filesort' können Sie sortierte Indizes zu Ihren Spalten hinzufügen? – edze
auf welchen sollte ich einen Index hinzufügen? Auf alles? Beachten Sie auch, dass einige andere Felder durchsucht werden (ich habe einen Index für diese). – Nin
Ja, ein geordneter Index für jede Spalte, die Sie gruppieren müssen. Wenn Sie nach 'a' gruppieren, beginnt MySQL damit, Ihre Tabelle nach' a' zu sortieren und so weiter. Ich denke, das ist dein Engpass. – edze