0

我感兴趣的查询如下

    SELECT COUNT(a.id) 
      FROM users AS a 
RIGHT JOIN date_log AS b 
        ON a.id = b.user_id 
     WHERE
           b.meeting_date BETWEEN '2012-06-01' 
                      AND DATE_ADD('2012-06-01', INTERVAL 1 MONTH) 
  GROUP BY a.id

但是,当我尝试从大型数据库中选择数据时,它太慢了。我在查询中添加了“分组依据”字词以删除重复的 ID。

有没有更好的方法来完成这项工作?

4

2 回答 2

1

首先检查您是否为 date_log.user_id 和 meeting_date 设置了索引。

那么您是否考虑过使用“不同”而不是组?

Select count(distinct a.id)
于 2012-07-08T17:22:42.183 回答
1

如果您只需要计数,您可以将此查询设为左连接,并查看 MySQL 是否有更好的时间执行它(我不确定它实际上是如何执行 RIGHT JOIN 的,但我可以以低效的方式想象它与左派相比...

SELECT users.id, count(users.id) as user_count
FROM 
  date_log
  LEFT JOIN users ON date_log.user_id = users.id
WHERE
  date_log.meeting_date BETWEEN '2012-06-01' AND DATE_ADD('2012-06-01', INTERVAL 1 MONTH)
GROUP BY users.id
于 2012-07-08T17:32:43.103 回答