mysql组通过性能调优

时间:2009-11-19 07:03:30

标签: mysql group-by

select field1,count(*) from table where $condition group by field1
select field2,count(*) from table where $condition group by field2

基本上这就是我现在正在做的工作,有没有办法优化性能,以便MySQL不需要搜索两次来为where子句分组?

2 个答案:

答案 0 :(得分:1)

如果表格很大且$ 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;

答案 1 :(得分:0)

这里没有灵丹妙药...... 聚合发生的密钥是不同的,因此SQL需要迭代两个不同的列表。为了使这一点更加明显,请问自己如何返回数据:首先是所有field1,然后是所有字段2,还是交织在一起,或者可能是“pivoted”(但是如何?..)

为了避免对服务器进行额外的“旅行”,我们可以将这两个结果集一起返回,或者我们甚至可以使用UNION ALL对这两个结果进行分组(并且小心地添加前缀列以了解什么是什么)但是后一种解决方案最终会对服务器造成更多的负担。