我有一个查询需要 48 秒才能执行,如下所示:
SELECT count(DISTINCT tmd_logins.userID) as totalLoginsUniqueLast30Days
FROM tmd_logins
join tmd_users on tmd_logins.userID = tmd_users.userID
where tmd_users.isPatient = 1 AND loggedIn > '2011-03-25'
and tmd_logins.userID in
(SELECT userID as accounts30Days FROM tmd_users
where isPatient = 1 AND created > '2012-04-29' AND computerID is null)
当我删除DISTINCT
关键字时,它需要不到 1 秒的时间,所以似乎瓶颈就在其中。
tmd_logins
每次用户登录系统时,数据库都会向表中添加一个条目。我正在尝试获取在给定时间段内(例如过去 30 天)内创建并登录的所有患者用户的总数。
我尝试删除 DISTINCT 关键字并添加group by tmd_logins.userID
到语句中,但性能问题仍然存在。
表tmd_logins
有大约 300,000 条记录,tmd_users
大约有 40,000
有没有更好的方法来做到这一点?