から多くのグループ化された値を取得:私はこのようなテーブル構造を持つ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
);
これは、0から200までの値を持ついくつかの列を持つ約30の列を持っている(a、b)は、いくつかはわずか5つの値を持っています(0,1,2,3,4)(列cd)。 aproxがあります。テーブルの120k行
Iは、各列のクエリを使用して行ごとの項目数表示する:これに伴う問題は、それが30個のクエリ(列ごとに1)を発射することであり、基本的には同じセットを乗り越え
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;
を毎回データの
これを行うより良い方法はありますか?
私はGROUP BY WITH ROLLUPを試しましたが、結果として大量の結果セットが生成され、個々のクエリより処理が遅くなります。
あなたはSQLfiddle上のデータの選択を表示することができます:それはすべての良い場合http://sqlfiddle.com/#!2/a9fd8/1
毎回 '一時的な使用。あなたの列にソートされたインデックスを追加できますか? – edze
にインデックスを追加する必要がありますか?すべての上?また、いくつかの他のフィールドが検索されていることに注意してください(私はそれらのインデックスを持っています)。 – Nin
はい、グループ化する必要のある列ごとに1つの順序付きインデックス。 'a'でグループ化すると、MySQLはテーブルを' a'などでソートし始めます。私はこれがあなたのボトルネックだと思う。 – edze