在十亿条记录中检索用户的登录时间

时间:2017-11-05 11:55:25

标签: sql-server

有一个表保存用户的登录信息:

UserID       LoginTime               MacAddress     IPAdress
1        2017-02-05 20:02:40           --        192.168.10.3

此表有十亿条记录,我们将获得每个用户使用不同过滤器的最后登录时间,例如6个月前。此外,此表应与Users Table连接以检索用户信息,还可以请求Users表上的过滤器,例如: UserName ='xxxx'和Last_Login_Time在6个月前的位置,以及任何其他过滤器。

我知道有类似RowNumber的方式和这样的方式:

SELECT MAX(LoginTime) AS [Last Login Time], UserID
FROM UsersLoginHistory
GROUP BY UserID;

但这些方式需要很长时间。

对于这个问题,有人可以建议更好的查询(更喜欢使用偏移进行分页)吗?

1 个答案:

答案 0 :(得分:0)

使用当前数据模型,您无论如何都需要读取所有表,以检索有关所有用户及其所有上次登录的信息。要快速生成此类报告,您应该预先计算它。

您可以建议以下方法之一:

  1. 将上次登录时间存储在UsersLogin表中。您的后端应该在插入UsersLoginHistory的同一事务中正确更新此表。

  2. 在UserID,LoginTime上创建索引。

  3. 您可以在数据库中的某处复制#1的逻辑(例如,使用插入后触发器),但我不建议这样做,因为业务逻辑最终会在您的数据库中膨胀。