这一权利联接查询太慢
我感兴趣的查询低于这一权利联接查询太慢
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
然而,当我尝试从一个大的数据库中选择数据是太慢了。 我在查询中添加了“group by”条款以删除重复的ID。
有没有更好的方法来完成这项工作?
如果你只需要计数,可以让这个查询左连接,看看MySQL有一个更好的时间执行它(我不知道它是如何执行右连接,但我可以想象中相比,左派这是低效的方式...
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
谢谢你的建议,ctrahey。我会尽力... – 2012-07-08 17:34:32
我的工作更快速地完成了你的查询。谢谢〜 – 2012-07-08 17:51:30
没问题;我会感谢你的接受;-) – 2012-07-08 17:58:38
首先检查您是否为date_log.user_id和meeting_date设置了索引。
那你有没有考虑用'distinct'而不是group?
Select count(distinct a.id)
太棒了,我会试试这个。谢谢 – 2012-07-08 17:51:54
哪些字段建立索引?你能不能给我们的'SHOW CREATE TABLE users'和'SHOW CREATE TABLE date_log'? – raina77ow 2012-07-08 17:19:44
感谢您的意见的结果,raina.a.id是主键,b.user_id也是,并且b.meeting_date也有索引(KEY'create_date'('meeting_date')) – 2012-07-08 17:25:35
'EXPLAIN'显示什么? – raina77ow 2012-07-08 17:26:32