SQL Server 中的两个查询级别的Hint- NOLOCK和ROWLOCK

你可以使用这两个query-level的hint来告诉SQL Server你希望如何处理locking.

 

NOLOCK

============

使用NOLOCK, 你会告诉SQL Server去忽略掉locks, 直接从表中读取数据. 这意味着你规避了SQL Server的锁系统, 会大幅度地提高性能和可扩展性.

 

然而, 既然你完全地绕过了锁系统, 也就意味着你的代码存在着读取了脏数据的风险. 你也许会读取到没有在一个transaction中被committed的不合法的数据. 这很危险.

 

ROWLOCK

============

使用ROWLOCK, 你会告诉SQL Server去仅仅使用row-level的lock. 在SELECT, UPDATE, 和DELETE语句中, 你可以使用这个关键字, 但是我仅在UPDATE和DELETE中使用它.

 

你也许会认为在你指定了primary key的UPDATE中, 必定会引发一个row lock. 但是当sql server得到一个有很多这样操作的批处理, 而这些条目中的一些不少都在一个page里的时候, 你有时候会看到一个page lock, 这样的话就会有问题发生了. 如果你不为update或者delete指定primary key, 那么数据库就没有理由不去假设很多其他东西不会受到影响, 所以, 它就直接使用page lock, 于是坏事情就发生了.

 

资料来源:

SQL Server Locks

http://www.developerfusion.com/article/1688/sql-server-locks/4/

posted on   中道学友  阅读(2336)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律

导航

< 2010年3月 >
28 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 1 2 3
4 5 6 7 8 9 10

技术追求准确,态度积极向上

点击右上角即可分享
微信分享提示