zoukankan      html  css  js  c++  java
  • WITH (NOLOCK)

    缺点:

      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

  • 相关阅读:
    C#获取根目录的方法集合
    C# 获取文件MD5值的方法
    VS2015 搭建 Asp.net core 开发环境
    【Networking】容器网络大观 && SDN 资料汇总
    【Networking】flannel,pipework,weave,udp,vxlan,ovs等资料
    【K8s】Kubernetes 最近正在看的资料
    【GoLang】go 微服务框架 && Web框架学习资料
    【Eclipse】eclipse che 协作开发
    【Kubernetes】两篇文章 搞懂 K8s 的 fannel 网络原理
    【SpringBoot】SpringBoot 入门示例
  • 原文地址:https://www.cnblogs.com/qianblue/p/4644730.html
Copyright © 2011-2022 走看看