繁体   English   中英

mysql分组按性能调优

[英]mysql group by performance tuning

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

基本上,这就是我现在正在做的事情,有没有一种方法可以优化性能,从而使MySQL不需要搜索两次即可对where子句进行分组?

如果表很大并且$ condition为'rare',则可能有助于在内存中创建一个临时表。 这样,您将其分组两次,但仅过滤一次。

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;

这里没有神奇的子弹...进行聚合的关键是不同的,因此SQL需要在两个不同的列表上进行迭代。 为了使这一点更明显,请问自己自己如何处理返回的数据:首先是所有field1,然后是所有领域2,或者是交织在一起的,或者可能是“枢轴化的”(但是如何?..)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM