【问题标题】:Mysql group by query optimizationMysql group by 查询优化
【发布时间】:2012-05-27 22:27:53
【问题描述】:

我在mysql中有这样的查询

select count(*) 
from (
    select count(idCustomer)
    from customer_details 
    where ... 
    group by idCustomer having max(trx_staus) = -1 
) as temp

所以基本上找到满足某些条件(一个或两个)且最大交易状态 = -1(其他可以是 2、3、4)的客户数量。但是这个查询在我的本地机器上大约需要 30 分钟,在高配置服务器上大约需要 13 秒(大约 20 GB 内存和 8 核处理器)。我在表中有 13 行。我知道 group by 和 max 功能太昂贵了。我能做些什么来优化这个查询。有什么建议吗?

【问题讨论】:

  • WHERE ... 中的简单条件以外的任何内容?
  • 不,什么都没有,而且条件如此简单,有些时间没有使用,在上述情况下我没有使用,但我需要一些时间,这就是我提到的原因。
  • WHERE、GROUP BY 和 MAX 子句中的所有字段是否都有相应的索引?
  • 是的,所有必填字段都已编入索引

标签: mysql query-optimization


【解决方案1】:

内部查询必须检查所有行以确定聚合最大值;如果您想对此进行优化,请将包含最大值的计算字段添加到您的客户表中并在其上进行选择。

诀窍是让该字段保持最新:)

【讨论】:

  • 你说只能是-1、2、3、4不行吗?
  • 这是关于 max() 函数中的事务状态
  • @Nirmal-thInkbeYond 我的意思是将 max() 保留在计算字段中,所以我不确定这对您有何用处。
猜你喜欢
  • 1970-01-01
  • 2020-05-16
  • 2019-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 2012-06-12
  • 2012-12-31
相关资源
最近更新 更多