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