这个右连接查询太慢了

时间:2012-07-08 17:16:40

标签: mysql

我感兴趣的问题在

之下
    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。

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

2 个答案:

答案 0 :(得分:1)

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

那么你是否考虑使用'distinct'而不是group?

Select count(distinct a.id)

答案 1 :(得分:1)

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

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