sql server 使用nolock提升性能
博客园有许多关于nolock的文章,大部分都写得很好,例如:http://www.cnblogs.com/huangxincheng/p/4292320.html
这里仅结合个人项目,作为个人笔记记录。
nolock 的使用方法如:
select * from table1 with(nolock)
with 后面加“锁定提示”,具体的锁定提示有许多种,有表级别,页级别,行级别等等。具体可以参照上面的链接。
nolock 是锁定级别是:不采用任何锁。在允许脏读的情况下,使用nolock可以提升查询性能,避免锁定数据。关键词就是加粗部分了。
脏读的意思是:读取了其它事务中未提交的数据,但该事务可能被回滚。
首先要明确的是,sql server 对于 insert/update/delete 都会加上排它锁,也就是在这几个操作进行时,其它的操作都必须进行等待。而对于select会加上共享锁,也就是在读取时,其它操作只能进行读取。看一个简单的测试,新建两个查询窗口,sql如下:
--查询窗口一
begin tran
update test set c = '2' where id = 2 --查询窗口二
select * from test where id = 2
当查询窗口一的事务没有提交时,其它查询是无法读取的。这是sql server 的默认隔离级别,保证了不会出现脏读。接着我们用 nolock 来测试,查询窗口二的sql改为:
--查询窗口二
select * from test with(nolock) where id = 2
可以看到,即使查询窗口一的事务没有提交,数据依然可以被读取出来。那什么时候出现脏读呢?很简单,当事务rollback时,就读取到脏数据了。
对于一些对数据要求严格的系统,脏读是不可接受的,那么nolock 也就不能使用。但许多时候,我们的查询是可以允许脏读的,因为它带来许多好处。
1. 提升查询性能
从上面的例子可以看到,nolock不受锁的影响,这表示它可以直接读取数据,而不用等到锁释放。
2. 避免锁定数据
这个好处从上面的链接可以理解得更好。有时候我们的 select 可能也是耗时的,上面说到,select会加上共享锁,也就是select的时候,其它事务例如update是无法进行的,如果我们的select执行太久,那么其它操作就可能会因为超时而执行失败。
sql server 使用nolock提升性能的更多相关文章
- SQL Server 2016 查询存储性能优化小结
SQL Server 2016已经发布了有半年多,相信还有很多小伙伴还没有开始使用,今天我们来谈谈SQL Server 2016 查询存储性能优化,希望大家能够喜欢 作为一个DBA,排除SQL Ser ...
- SQL Server 2014里的性能提升
在这篇文章里我想小结下SQL Server 2014引入各种惊艳性能提升!! 缓存池扩展(Buffer Pool Extensions) 缓存池扩展的想法非常简单:把页文件存储在非常快的存储上,例如S ...
- 智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 )
SQL Optimizer for SQL Server 帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 SQL Optimizer for SQL Server 让 SQL Serve ...
- SQL Server with(nolock)详解
大家在写查询时,为了性能,往往会在表后面加一个nolock,或者是with(nolock),其目的就是查询是不锁定表,从而达到提高查询速度的目的. 什么是并发访问:同一时间有多个用户访问同一资源,并发 ...
- 为什么SQL语句Where 1=1 and在SQL Server中不影响性能
最近一个朋友和我探讨关于Where 1=1 and这种形式的语句会不会影响性能.最后结论是不影响. 虽然结论正确,但对问题的认识却远远没有解决问题的根本.实际上在T-SQL语句的书写过 ...
- SQL Server 2014如何提升非在线的在线操作
在今天的文章里,我想谈下在线索引重建操作( Online Index Rebuild operations),它们在SQL Server 2014里有怎样的提升.我们都知道,自SQL Server 2 ...
- SQL Server磁盘I/O性能分析
SQL Server中的I/O操作类型: 1.对于内存中没有缓存的数据,第一次访问时需要将数据从所在的页面从数据文件中读取到内存中 2.在任何Insert/Update/Delete提交前,SQL S ...
- 【SQL server初级】数据库性能优化二:数据库表优化
数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序操作优化.此文为第二部分 数据库性能优化二:数据库表优化 优化①:设计规范化表,消除数据冗余 数据库范式是确保数据库结构合理,满足各种查询 ...
- 【SQL server初级】数据库性能优化一:数据库自身优化(大数据量)
数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序操作优化.此文为第一部分 数据库性能优化一:数据库自身优化 优化①:增加次数据文件,设置文件自动增长(粗略数据分区) 1.1:增加次数据文 ...
随机推荐
- 纯CSS打造好看的按钮样式
好看的按钮.链接.div样式,效果预览: http://hovertree.com/code/run/css/s8o19792.html 发现今天积分和排名不错: 代码如下: <!DOCTYPE ...
- javascript移动设备Web开发中对touch事件的封装实例
在触屏设备上,一些比较基础的手势都需要通过对 touch 事件进行二次封装才能实现.zepto 是移动端上使用率比较高的一个类库,但是其 touch 模块模拟出来的一些事件存在一些兼容性问题,如 ta ...
- Android Touch事件传递机制 一: OnTouch,OnItemClick(监听器),dispatchTouchEvent(伪生命周期)
ViewGroup View Activity dispatchTouchEvent 有 有 有 onInterceptTouchEvent 有 无 无 onTouchEvent 有 有 有 例 ...
- 每个程序员都会的 35 个 jQuery 小技巧
1. 禁止右键点击 $(document).ready(function(){ $(document).bind("contextmenu",function(e){ return ...
- IOS开发基础知识--碎片7
三十八:各个版本IPHONE分辨率及图片的实现原理 desert@2x : iPhone 4s ( x ) desert-568h@2x : iPhones , 5C and 5S ( x ) des ...
- IOS开发基础知识--碎片17
1:contentSize.contentInset和contentOffset区别 contentSize 是scrollview中的一个属性,它代表scrollview中的可显示区域,假如有一个s ...
- Android高效计算——RenderScript(一)
高效计算——RenderScript RenderScript是安卓平台上很受谷歌推荐的一个高效计算平台,它能够自动把计算任务分配到各个可用的计算核心上,包括CPU,GPU以及DSP等,提供十分高效的 ...
- GCD
Grand Central Dispatch(GCD)包含语言特点.运行库和系统增强功能,它提供系统的.综合的改进,进而去支持并发代码在iOS和OSX多核硬件上的执行. 子系统.CoreFoundat ...
- HDFS --访问
Hdfs的访问方式有两种,第一:类似linux命令,hadoop shell.第二:java API方式. 先看第一种. FS Shell cat chgrp chmod chown copyFrom ...
- (转)Div和Table的区别
原文:http://www.cnblogs.com/lovebear/archive/2012/04/18/2456081.html Div与table的区别 1:速度和加载方式方面的区别 div 和 ...