3

ユーザーのいるテーブルがあります

id | user_id | session_id | last_activity (datetime)

すべてのユーザー要求に対して面倒なクエリを実行せずに、オンラインユーザーのリストを作成するための最良の方法は何ですか?1分ごとにcronを作成し、これを介して、最後の1分間に最後のアクティビティを持つ個別の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 列を更新します。毎分または 2 分ごとに実行され、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 に答える