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/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律