MySQL группа по настройке производительности - PullRequest
1 голос
/ 19 ноября 2009
select field1,count(*) from table where $condition group by field1
select field2,count(*) from table where $condition group by field2

По сути, это то, чем я сейчас занимаюсь, есть ли способ оптимизировать производительность, чтобы MySQL не приходилось искать два раза для группировки по предложению where?

Ответы [ 2 ]

1 голос
/ 19 ноября 2009

Если таблица большая, а $ condition - «редкая», это может помочь создать временную таблицу в памяти. Таким образом, вы группируете его дважды, но фильтруете только один раз.

CREATE TEMPORARY TABLE temp ENGINE=MEMORY
 select field1,field2 from table where $condition;

select field1,count(*) from temp group by field1;
select field1,count(*) from temp group by field2;
0 голосов
/ 19 ноября 2009

Здесь нет волшебной палочки ... ключ, по которому происходит агрегация, отличается, поэтому SQL нужно перебирать по двум разным спискам. Чтобы сделать это немного более очевидным, спросите себя, как бы вы хотели, чтобы возвращались данные: сначала все field1, затем все field 2, или переплетенные, или, возможно, «поворотные» (но как? ..)

Чтобы избежать дополнительной «поездки» на сервер, мы могли бы вернуть эти два набора результатов вместе или даже сгруппировать их, используя UNION ALL (и осторожно добавлять префиксный столбец, чтобы знать, что к чему) , но это последнее решение приведет к тому, что сервер будет облагаться налогом чуть больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...