美文网首页
Sql 多线程下查询数据库表,不重复

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

作者: 大川的川 | 来源:发表于2019-06-12 14:49 被阅读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);
    
    

    相关文章

      网友评论

          本文标题:Sql 多线程下查询数据库表,不重复

          本文链接:https://www.haomeiwen.com/subject/srklfctx.html