使用每x分钟更新一次的临时表消除查询

时间:2012-12-22 02:50:50

标签: sql-server database sql-server-2008

我有一个用户表

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

1 个答案:

答案 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