缺点:

  1.会产生脏读

  2.只适用与select查询语句

优点:

  1.有些文件说,加了WITH (NOLOCK)的SQL查询效率可以增加33%。

  2.可以用于inner join 语句

脏读: 一个用户对一个资源做了修改,此时另外一个用户正好读取了这条被修改的记录,然后,第一个用户放弃修改,数据回到修改之前,这两个不同的结果就是脏读。

详细内容:

  要提升SQL的查询效能,一般来说大家会以建立索引(index)为第一考虑。其实除了index的建立之外,当我们在下SQL Command时,在语法中加一段WITH (NOLOCK)可以改善在线大量查询的环境中数据集被LOCK的现象藉此改善查询的效能。

不过有一点千万要注意的就是,WITH (NOLOCK)的SQL SELECT有可能会造成Dirty Read(脏读)。

例如:

SELECT COUNT(UserID) 
FROM EMPLOYEE WITH (NOLOCK) 
JOIN WORKING_GROUP WITH (NOLOCK) 
ON EMPLOYEE.UserID = WORKING_GROUP.UserID

除了简单的SELECT之外,有JOIN的SELECT语法也是可以使用的。但是DELETE、INSERT、UPDATE这些需要transaction的指令就不行了…

有些文件说,加了WITH (NOLOCK)的SQL查询效率可以增加33%。
加了WITH (NOLOCK)即告诉SQL Server,我们的这段SELECT指令无需去考虑目前table的transaction lock状态,因此效能上会有明显的提升,而且数据库系统的Lock现象会有明显的减少(包含Dead Lock)。

有 一点要特别注意,因为WITH (NOLOCK)不考虑目前table的transaction lock,因此当有某些资料正处于多个phase交易(例如跨多个table的transaction交易-->如提款系统),WITH (NOLOCK)会让目前处理交易process的数据被忽略…

讲白话一点,也就是说当使用NoLock时,它允许阅读那些已经修改但是还没有交易完成的数据。因此如果有需要考虑transaction事务数据的实时完整性时,使用WITH (NOLOCK)就要好好考虑一下。

如果不需考虑transaction,WITH (NOLOCK)或许是个好用的参考。

注1:WITH ( < table_hint > )
指定由查询优化器使用的表扫描、一或多个索引,
或由查询优化器利用此数据表以及为此语句使用锁定模式。

注2:WITH (NOLOCK)相当于READ UNCOMMITTED

最新文章

  1. Android 浏览器 —— 使用 WebView 实现文件下载
  2. zabbix监控系统客户端安装
  3. win7 通过命令行压缩文件
  4. 前端面试库_JS部分_02
  5. Ioc 控制反转 实例
  6. C/C++中浮点数格式学习——以IEEE75432位单精度为例
  7. [TypeScript] Configuring TypeScript Which Files to Compile with &quot;Files&quot; and &quot;OutDir&quot;
  8. C++11 static_assert
  9. 记录一个nginx的配置
  10. Configuring Apache Kafka for Performance and Resource Management
  11. JavaScript入门学习笔记(表单验证)
  12. JAVA中代理模式
  13. JMETER java.net.SocketTimeoutException: Read timed out
  14. Powermock2.0.0 详细 总结
  15. Scala - 快速学习01 - Scala简介
  16. document.execCommand()的用法小记
  17. textarea文本域宽度和高度width及height自动适应实现代码
  18. python 全栈开发,Day15(递归函数,二分查找法)
  19. SNF快速开发平台3.0之-界面个性化配置+10种皮肤+7种菜单-Asp.net+MVC4.0+WebAPI+EasyUI+Knockout
  20. MarkdownPad 2 for Windows 10 预览问题解决方案。

热门文章

  1. 武汉科技大学ACM :1001: 零起点学算法34——继续求多项式
  2. 堆/栈的比较 以及 malloc/new动态内存的开辟
  3. idea intellij 快捷键(ubuntu版本)
  4. 0X0000124
  5. 用dup2和dup产生一份file descriptor 的拷贝
  6. ASP.NET MVC5中的数据注解
  7. codevs 3094 寻找sb4
  8. Android监听事件
  9. Cracking the coding interview--Q2.1
  10. android中对线程池的理解与使用