事务隔离级别是否也会影响索引?

mar*_*c_s 6 sql-server-2008 sql-server transaction isolation-level

这是 SQL Server 专家的一个建议:如果我将 SQL Server 2008 事务隔离级别设置为READ UNCOMMITTED,这是否也会影响索引页?

例如,使用ISOLATION LEVEL READ UNCOMMITTEDALLOW_PAGE_LOCKSALLOW_ROW_LOCKS对索引有什么影响(如果有)?

ALTER INDEX IX_FirstName ON Employee
SET (ALLOW_PAGE_LOCKS=OFF, ALLOW_ROW_LOCKS=OFF)
Run Code Online (Sandbox Code Playgroud)

我似乎无法在任何地方找到明确的答案——关于事务隔离级别的 MSDN 文档实际上只讨论了数据页......

Gra*_*hey 6

不会。它不会影响有关 SQL Server 内部管理的任何内容。您正在为您设置该连接,用于您的查询。SQL Server 以自己的方式管理自己的锁定。

为什么要关闭索引上的页和行锁定?与让 SQL Server 按其认为合适的方式管理该索引相比,您更有可能看到更严重的锁定。通过将这两个值都设置为 OFF,您只是告诉 SQL Server 取消表锁定。考虑到你也在搞乱 read_uncommitted,我敢打赌你不想要那样。

如果您问 read_uncommitted 是否允许您对索引进行脏读,是的。确实如此。