如何使用SUM(条件)优化MySQL查询

时间:2013-05-17 14:58:43

标签: mysql optimization count sum

我有以下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')

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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