使用(updlock,rowlock)对SQL Server中的查询了解效果
我正在使用NHibernate从报告数据库查询数据,并希望优化READ性能。 “脏读”根本不是一个问题。 NHibernate提供锁定模式。 如果我使用LockMode.UpgradeNoWait模式,我可以看到在生成的SQL中出现了'with(updlock,rowlock)'。 我一直在读这篇文章,但是我的SQL很不幸地不能真正理解分支。 我相信我真正想要的是'with(nolock)'语句出现,但NHibernate没有看到提供任何方式。
我的问题是这样的:假设我的表正在写入其他交易。 对此表的查询中的'with(updlock,rowlock)'提示是否会导致它返回更快? 它会伤害表现吗? 查询是针对单个表格的非常简单的选择。 没有加入。 包含查询的表上有一个非聚集索引。
updlock
会在被触摸的每一行上放置更新锁 (选中) - 所以这意味着直到事务结束时(显式或隐式), SELECT
触及的行将有一个更新锁,允许其他锁要读取的事务,但不更新或删除该行。
该rowlock
只是表明你想要行级锁 ,而不是页面或表锁。
如果您需要先选择该锁,则该锁有意义,然后在同一个显式事务中更新一行。
它不会使其运行速度更快,并可能导致其他交易被阻止
显然我误解了在NHibernate中使用Lock模式。 他们与添加nolock提示到查询没有任何关系。 这是做到这一点的方法。
链接地址: http://www.djcxy.com/p/5617.html上一篇: Understanding effects of with (updlock, rowlock) on a query in SQL Server