3

我与用户有一张桌子

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
4

1 回答 1

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
于 2012-12-22T03:07:32.160 回答