了解 with (updlock, rowlock) 对 SQL Server 中查询的影响



我正在使用 NHibernate 从报表数据库中查询数据,并希望优化读取性能。"脏读"根本不是问题。NHibernate提供锁定模式。如果我使用 LockMode.UpgradeNoWait 模式,我可以看到在生成的 SQL 中出现了"with (updlock, rowlock)"。我一直在阅读这个,但不幸的是,我的SQL不够复杂,无法真正理解后果。我相信我真正想要的是一个"with (nolock)"语句出现,但NHibernate没有看到提供任何方法来做到这一点。

那么我的问题是:假设我的表正在其他事务中写入。 针对此表的查询中的"with(updlock,rowlock)"提示是否会导致它更快地返回?它会损害性能吗?查询是针对单个表的非常简单的选择。无联接。表上有一个覆盖查询的非聚集索引。

> updlock将在被触摸(选择)的每一行上放置更新锁 - 因此这意味着直到事务结束(显式或隐式),SELECT触及的行将具有更新锁,允许其他事务读取,但不能更新或删除行。

rowlock仅指示您需要行级锁,而不是页或表锁。

如果您需要先选择,然后更新同一显式事务中的行,则该锁是有意义的。

它不会使其运行得更快,并且可能导致其他事务被阻止

显然我对在 NHibernate 中使用锁定模式有误。它们与向查询添加 nolock 提示没有任何关系。这是这样做的方法。

相关内容

最新更新