Sql 多线程下查询数据库表,不重复

2019-06-12  本文已影响0人  大川的川

想必很多人会遇到这样的情况,那么看看如何实现,下面的SQL语句已经有过 “30W/天” 数据的考验

  1. 数据库表中应该有一个是否被读取的状态字段:Status 取值:0未读取 1已读取;
  2. 将要读取的记录更新状态,通过deleted表存储(就像是在触发器中使用一样)取出的方式,来保证每条记录只会被读取一次:update Admins set [Status]= 1 output deleted.ID into @Rowid Where Id in (Select top 2 Id from Admins WITH(NOLOCK) Where [Status] = 0 order by id );
  3. 读取deleted表的记录select * from Admins WITH(NOLOCK) where ID in (select Rowid from @Rowid);

N个接口线程,每个线程需要获取的是前2条未读取的数据,固然实现以下代码:

declare @Rowid table(rowid int);

update Admins set [Status]= 1 output deleted.ID into @Rowid Where Id in
(Select top 2 Id from Admins WITH(NOLOCK)  Where [Status] = 0 order by id );

select  * from Admins where ID in (select Rowid from @Rowid);

上一篇下一篇

猜你喜欢

热点阅读