我有一个用户表
id | user_id | session_id | last_activity (datetime)
拥有在线用户列表的最佳方法是什么,而不是对每个用户请求进行痛苦的查询?让我们说有可能每1分钟有一个cron,并通过这个来创建一个临时表,其中包含最后一分钟最后一次活动的独特user_id?主要目标是获得比此查询更快的东西
select user_id
from users_session
where last_activity > dateadd(mi, -1, Current_TimeStamp)
group by user_id
答案 0 :(得分:2)
你可以做几件事,但我喜欢这样的事情:
登录时(如果您有登录?),请在ActiveUsers表中插入一行。每次用户执行某些操作时,请更新此表中的last_activity列。拥有一个每分钟或两分钟运行的作业,并删除此表中last_activity为< DATEADD(mi, -10, GETDATE()
的行。
这样,您查找活跃用户的查询就是SELECT user_id FROM ActiveUsers
。
另外,要获得有关活跃用户的更多信息,请执行以下操作:
SELECT U.name, U.age, U.shoe_size, U.is_premium_member, AU.last_activity
FROM Users U
JOIN ActiveUsers AU ON U.User_id = AU.User_id