【问题标题】:mysql group by performance tuningmysql group by 性能调优
【发布时间】:2009-11-19 07:03:30
【问题描述】:
select field1,count(*) from table where $condition group by field1
select field2,count(*) from table where $condition group by field2

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

【问题讨论】:

  • 你能改写语句“这样 MySQL 不需要搜索两次来分组 where 子句”

标签: mysql group-by


【解决方案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;

【讨论】:

  • 不,我不能假设那种事情。
  • 我认为这会起作用,如果您在临时表上创建索引会更好。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    相关资源
    最近更新 更多