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

想必很多人会遇到这样的情况,那么看看如何实现,下面的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);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容