从mysql中获取许多分组值

Nin*_*Nin 8 mysql performance group-by

我有这样的表结构:

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
  );
Run Code Online (Sandbox Code Playgroud)

这有大约30列,其中一些列的值为0-200(a,b),有些列只有5个值(0,1,2,3,4)(列cd).有aprox.表中有120k行.

要显示每行的项目数,我对每列使用查询:

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;
Run Code Online (Sandbox Code Playgroud)

这样做的问题是它将触发30个查询(每列一个)并且每次基本上都会遍历同一组数据.

有一个更好的方法吗?

我已尝试使用GROUP BY WITH ROLLUP但这导致了一个庞大的结果集,它比每个单独的查询处理得慢.

您可以在SQLfiddle上查看选择的数据:http://sqlfiddle.com/#!2/a9fd8/1

use*_*873 2

也许这样的事情会工作得更快。

select qq, q, count(*) from
(
select 'a' qq, a q FROM test
union all select 'b' qq, b q FROM test
union all select 'c' qq, c q FROM test
union all select 'd' qq, d q FROM test
union all select 'e' qq, e q FROM test
) t
group by qq, q;
Run Code Online (Sandbox Code Playgroud)