SQL流式SELECT查询返回行数问题:检索中新增行是否被包含?
流式SELECT查询最终返回行数的判断
嘿,这个问题的答案其实得看你的数据库隔离级别和流式查询的具体实现,我给你掰扯清楚两种核心场景:
快照类隔离级别(可重复读/快照隔离)
像PostgreSQL、MySQL InnoDB这类主流数据库,在可重复读或者快照隔离级别下,当你发起查询的瞬间,数据库会创建一个一致性快照——简单说就是把当时的数据状态“定格”下来了,也就是你说的100行。后续插入的10行是快照生成之后的新数据,这个查询根本“看不见”,所以最终会返回100行。哪怕你是用游标分批流式拉取结果,只要是同一个事务内的操作,结果都是基于初始快照的。读已提交隔离+实时流式查询模式
要是你用的是实时数仓、或者专门的流式SQL引擎(比如Flink SQL这类),而且开启了读已提交隔离,同时查询是设计成持续监听新数据的模式,那情况就不一样了。这种流式查询会在检索过程中动态捕捉到新插入的10行,最终返回110行。不过这种是特殊的实时流处理场景,不是咱们平时用的普通分批流式查询。
总结一下:普通数据库的常规流式查询(游标分批),大概率返回100行;只有专门的实时流式查询引擎,才可能返回110行,核心看查询是基于初始快照还是实时扫描新数据。
内容的提问来源于stack exchange,提问作者XYZ
相关产品推荐
相关产品推荐

