SELECT查询:Snapshot与Read Uncommitted隔离级别对比及性能结果疑问
Read Uncommitted与Snapshot隔离级别的性能和结果差异
性能对比
Read Uncommitted确实通常比Snapshot隔离级别更快,核心原因在于两者的实现逻辑差异:
- Read Uncommitted完全跳过一致性视图处理,直接读取数据页上的最新版本,不需要维护或查询数据的版本链,也没有快照相关的元数据开销。
- Snapshot隔离级别需要读取事务启动时刻的一致性快照,数据库要持续维护数据的多版本链,查询时还要在版本链中定位到对应时间点的有效数据,这些额外操作会带来一定的性能损耗。
查询结果一致性
这两种隔离级别的SELECT查询结果几乎不可能一致,差异源于数据可见性规则的本质不同:
- Read Uncommitted允许读取其他事务未提交的修改(即脏读),只要数据页上有最新的修改,不管提交与否都会被读到。
- Snapshot隔离级别保证读取的是事务启动时所有已提交数据的快照,既看不到未提交的修改,也看不到当前事务启动后其他事务提交的修改。
举个实际场景:事务A修改了一条记录的字段值但未提交,此时用Read Uncommitted查询会直接读到修改后的值;而用Snapshot查询,结果还是这条记录修改前的原始值。
内容的提问来源于stack exchange,提问作者user1785960
相关产品推荐
相关产品推荐

