• 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/

  • 相关阅读:
    P3224 [HNOI2012]永无乡(平衡树合并)
    jquery的队列问题
    值得以后看的东西
    js的>>>
    js的set和get
    js数组的操作方法
    中文冒号检查了两个小时
    setintervalue传参数的三种方法
    js轮训
    npm全局安装
  • 原文地址:https://www.cnblogs.com/awpatp/p/1683399.html
Copyright © 2020-2023  润新知