如何从SQL Server表中查询同IP不同用户名的资料

公司的业务有个功能需要查询哪些用户在某个时间内跟指定的某个用户使用相同的IP登录,

也就是查询条件是 userid='xxx', addtime>'2018-06-06 00:00:00'

Log表的结构是:

id int pk,

userid varchar(20),

ip varchar(50),

addtime datetime

目前做了组合索引

索引1:ip

索引2:userid,addtime

索引3:userid,addtime,ip

当数据达到25W条的时候,根据查询的条件所消耗的时间很长

下面是我目前使用的语句

select top 50 [userid],[ip],[addtime] from log
where [userid]<>'xxx' and addtime>'2018-06-06 00:00:00' and ip in (
select ip from log where [userid]='xxx' and addtime>'2018-06-06 00:00:00' group by ip)

大家如果有好的办法,请帮我解决一下,谢谢。


肥皂起泡泡
浏览 402回答 2
2回答

杨魅力

我有一个跟你差不多结构的表,45W记录,按你的需求查询,200毫秒,甚至连非聚集索引都没建。&nbsp;建议:先把索引去掉,然后跑这个SQL,再看 执行计划。

狐的传说

这个你在写业务逻辑的时候1.&nbsp;list<##> a&nbsp; = select ip from log where [userid]='xxx' and addtime>'2018-06-06 00:00:00' group by ip&nbsp; 先把ip查出来2.然后在select top 50 [userid],[ip],[addtime] from logwhere [userid]<>'xxx' and addtime>'2018-06-06 00:00:00' and ip in (a[i])&nbsp; 循环去把信息查出来&nbsp; &nbsp;分开来执行这个sql&nbsp;语句&nbsp; &nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP