我正在尝试对2表联接运行count查询。e\u客户端表有一百万个条目/行,而m\u用户只有50行,但count查询要花很长时间!
SELECT COUNT(`e`.`id`) AS `count`
FROM `e_amazing_client` AS `e`
LEFT JOIN `user` AS `u` ON `e`.`cx_hc_user_id` = `u`.`id`
WHERE ((`e`.`date_created` >= '2018-11-11') AND (`e`.`date_created` >= '2018-11-18')) AND (`e`.`id` >= 1)
我不知道这个问题怎么了?
3条答案
按热度按时间db2dz4w81#
您的查询正在提取2018-11-11当天/之后的所有记录,因为您的where子句的id>=1您在其中没有针对特定用户的子句。根据日期>=2018-11-18,您的原始查询中也有。你的意思可能是你只想要11/11到11/18周内的计数,而这个数字应该是>=11-11和<=11-18。
至于计数,您得到的是所有人(假设没有条目的id小于1)以及该日期范围内的计数。如果您希望按您所指示的每个用户进行分组,则需要按cx\u hc\u user\u id(user)列进行分组,以查看谁拥有最多的用户,或者将用户作为where子句的一部分来获取一个人。
您可以按计数降序获得计数最高的用户,但仍然不能肯定您的请求。
nkkqxpd92#
首先,我想这已经足够了:
如果
user
只有50行,我怀疑这是创建重复。比较date_created
是多余的。对于此查询,请尝试在上创建索引
e_amazing_client(date_created, id)
.xxls0lw83#
也许你想要这个:
在两个日期之间检查?
还有,你真的需要吗
如果
id
一个id通常在一个表中,是否有一个案例<1
?