tengo una estructura de tabla como la siguiente:conseguir muchos valores agrupados de 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
);
Esto tiene alrededor de 30 columnas con unas columnas que tienen valores de 0-200 (a, b) y algunos sólo tienen 5 valores (0,1,2,3,4) (columna cd). Hay aprox. 120k filas en la mesa.
Para mostrar el número de elementos por fila utilizo una consulta para cada columna:
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;
El problema con esto es que se disparará 30 consultas (una por columna) y, básicamente, va sobre el mismo conjunto de datos cada vez.
¿Hay una mejor manera de hacerlo?
He intentado con GROUP BY WITH ROLLUP, pero esto da como resultado un resultado masivo que es más lento de procesar que cada consulta individual.
Usted puede ver una selección de los datos sobre SQLfiddle: http://sqlfiddle.com/#!2/a9fd8/1
Everytime 'Uso temporal; Usando filesort', ¿puede agregar índices ordenados en sus columnas? – edze
en el que uno debería agregar un índice? ¿En todo? También tenga en cuenta que hay otros campos en los que se realiza una búsqueda (tengo un índice sobre ellos). – Nin
Sí, un índice ordenado para cada columna que necesita agrupar. Si agrupa por 'a', entonces MySQL comenzará a ordenar su tabla por' a' y así sucesivamente. Creo que este es tu cuello de botella. – edze