mysql按性能调整分组

mysql按性能调整分组,mysql,group-by,Mysql,Group By,基本上这就是我现在正在做的工作,有没有一种方法可以优化性能,这样MySQL就不需要搜索两次来分组where子句了?这里没有魔弹…进行聚合的键是不同的,所以SQL需要在两个不同的列表上迭代。为了使这一点更加明显,问问自己希望如何返回数据:首先返回所有字段1,然后返回所有字段2,或者相互交织,或者可能是“旋转”(但如何返回?) 为了避免对服务器的额外“绊倒”,我们可以将这两个结果集一起返回,或者我们甚至可以使用UNION ALL对这两个结果集进行分组(并小心地添加前缀列以了解是什么),但后一种解决方

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

这里没有魔弹…进行聚合的键是不同的,所以SQL需要在两个不同的列表上迭代。为了使这一点更加明显,问问自己希望如何返回数据:首先返回所有字段1,然后返回所有字段2,或者相互交织,或者可能是“旋转”(但如何返回?)


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

这里没有灵丹妙药……进行聚合的关键是不同的,因此SQL需要在两个不同的列表上迭代。为了使这一点更加明显,问问自己希望如何返回数据:首先返回所有字段1,然后返回所有字段2,或者相互交织,或者可能是“旋转”(但如何返回?)


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

如果表很大且$condition“罕见”,则,在内存中创建临时表可能会有所帮助。这样,您可以将其分组两次,但只过滤一次

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

如果表很大且$condition为“稀有”,则在内存中创建临时表可能会有所帮助。这样,您可以将其分组两次,但只过滤一次

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

您可以重新表述语句“这样MySQL就不需要在group by中搜索两次where子句”您可以重新表述语句“这样MySQL就不需要在group by中搜索两次where子句”不,我不能假设这样的事情。我想这会起作用,如果您在临时表上创建索引,效果会更好。不,我不能假设这种情况。我认为这会起作用,如果在临时表上创建索引,效果会更好。