【问题标题】:How to optimize a MySQL query with SUM(condition)如何使用 SUM(条件)优化 MySQL 查询
【发布时间】:2013-05-12 19:21:25
【问题描述】:

我有以下 MySQL 查询。

  SELECT user_id
         SUM(reached = 'Y') AS reached_count,
         SUM(reached = 'N') AS not_reached_count
    FROM goals
GROUP BY user_id

在表格目标中,我有大约 200 万个条目。执行查询大约需要 45 秒。

重头部分似乎是SUM(reached = 'Y'),这需要很长时间。我将它与COUNT(*) 进行了比较,后者确实更快,但没有区分 Y 和 N。

编辑:reached 的类型为 ENUM('Y','N')

【问题讨论】:

    标签: mysql optimization count sum


    【解决方案1】:

    尝试在user_id, reached 上添加索引,然后尝试查询:

    SELECT user_id, reached, count(*)
    FROM goals
    GROUP BY user_id, reached
    

    【讨论】:

    • +1 这太明显了,我错过了......如果他想要数据透视,他可以使用它作为子查询来做到这一点
    • 已经尝试过了,但是这个查询甚至更慢。我在两个字段上都创建了索引。
    【解决方案2】:

    最重要的部分是GROUP BY user_id,特别是如果你有很多用户,所以我建议添加ORDER BY NULL,这会有所帮助,你可以阅读更多here

    【讨论】:

      猜你喜欢
      • 2020-05-16
      • 2011-08-29
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多