gpt4 book ai didi

mysql - SQL查询从两个相当大的表中进行选择

转载 作者:行者123 更新时间:2023-11-30 01:37:06 24 4
gpt4 key购买 nike

我有 2 张 table :1)用户,存储用户凭证。它保存了 1000 多条用户记录。

ID | NAME | PASSWORD | USERTYPEID

2) user_logs,其中捕获登录详细信息。它相当大,即超过 100000 条记录。

ID | NAME | DATEOFLOGIN | USERID | LOGINTYPE

我必须找到在两个给定日期和他们上次登录日期之间未访问系统的用户。

SELECT MAX(userlogs.dateoflogin) AS lastlogindate,
u1.id AS Id,
u1.name AS Name
FROM USER u1
LEFT OUTER JOIN user_logs userlogs ON u1.id = userlogs.userid
WHERE u1.id NOT IN
( SELECT userid
FROM user_logs userlogs2
WHERE userlogs2.logtype='Login'
AND userlogs2.dateoflogin BETWEEN '2013-05-10' AND '2013-05-20'
AND userlogs2.userid IS NOT NULL)
GROUP BY u1.id;

如果表中的记录较小,则效果很好。但是在实际系统中,user表有超过1000条记录,user_logs表有超过100000条记录,查询花费了很长时间,我不知道是否成功。 :)

如何优化上述查询。此查询还会查找从未尝试登录的用户。

最佳答案

首先,如果您想提高性能,则需要修改该子查询。它们很方便,但往往会显着减慢查询速度。

其次,确保 WHERE 子句中的所有列都有索引。

关于mysql - SQL查询从两个相当大的表中进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16732721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com