大家一般写SQL语句会使用nolock 或 rowlock这种技术么 ?

探讨了在SQL Server中使用nolock提示的效果及潜在风险,包括性能提升与数据一致性之间的权衡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



版主

高级会员

精华贴数
4
专家积分
94
技术积分
22640
社区积分
4717
注册时间
2003-1-23
认证徽章
论坛徽章:
71
2015年新春福章日期:2015-03-06 11:57:31 2013年新春福章日期:2013-02-25 14:51:24 双黄蛋日期:2013-01-06 13:31:18 蜘蛛蛋日期:2013-01-06 10:26:08 茶鸡蛋日期:2012-11-21 19:35:23 ITPUB 11周年纪念徽章日期:2012-10-09 18:05:07 版主2段日期:2012-05-15 15:24:11 铁扇公主日期:2012-02-21 15:02:40 2012新春纪念徽章日期:2012-02-13 15:13:51 2012新春纪念徽章日期:2012-02-13 15:13:51 2012新春纪念徽章日期:2012-02-13 15:13:51 2012新春纪念徽章日期:2012-02-13 15:13:51
跳转到指定楼层
1#
  发表于 2009-6-29 14:48:17  | 只看该作者  | 倒序浏览
SQL Server 比较奇怪, Select 语句如果不使用 nolock  会比较慢 ,使用nolock数据会有错误 ( 对于那些
对及时性要求严格的数据来说 ) , 使用nolock 时可能还没有提交的数据会被查询出来, 资料上的原话 :  如果
是金融方面的代码或者一些非常规的总计(你想绝对保证安全性),应该小心行事并且不使用nolock这种技术。


大家一般写SQL语句会使用nolock 或 rowlock这种技术么  ?   SQL Server这样设计也未免太不负责任了 。

就做那个让你最不安的事情,因为它能发挥你最大的潜能。


常去的几个站:

  Documentation Library   |  
dba-oracle   |  Oracle Document   |   DBA Support  |   
OCP Study  |  Blog  |  Space  |  
IXDBA  |  MS TechNet  |  Oracle数据库文档 |  
Oracle86中文翻译 | MS BI开拓者 | IXORA | Hello DBA | 
Oracle OTN文章  | 
TaoBao DBA技术网 | MS SQL官方论坛  |  Yong's Web
|  EBS R12 Documents |  EBS eTRM Documents | 
Oracle DBA – Tips and Techniques
 
   

版主

按妞

招聘 :  Java研发
精华贴数
6
专家积分
236
技术积分
13367
社区积分
962
注册时间
2002-11-4
认证徽章
论坛徽章:
71
马上加薪日期:2014-02-19 11:55:14 ITPUB 11周年纪念徽章日期:2012-10-09 18:05:07 奥运会纪念徽章:网球日期:2012-08-23 14:58:08 奥运会纪念徽章:沙滩排球日期:2012-07-19 17:28:14 版主2段日期:2012-07-07 02:21:02 2012新春纪念徽章日期:2012-02-13 15:13:51 2012新春纪念徽章日期:2012-02-13 15:13:51 2012新春纪念徽章日期:2012-02-13 15:13:51 2012新春纪念徽章日期:2012-02-13 15:13:51 2012新春纪念徽章日期:2012-02-13 15:13:51 茶鸡蛋日期:2011-12-01 10:35:20 2012新春纪念徽章日期:2012-01-04 11:49:54
2#
  发表于 2009-6-29 15:19:58  | 只看该作者
首先要搞清楚为什么用nolock会比较慢
_________________________________________________
 
   

版主

高级会员

精华贴数
4
专家积分
94
技术积分
22640
社区积分
4717
注册时间
2003-1-23
认证徽章
论坛徽章:
71
2015年新春福章日期:2015-03-06 11:57:31 2013年新春福章日期:2013-02-25 14:51:24 双黄蛋日期:2013-01-06 13:31:18 蜘蛛蛋日期:2013-01-06 10:26:08 茶鸡蛋日期:2012-11-21 19:35:23 ITPUB 11周年纪念徽章日期:2012-10-09 18:05:07 版主2段日期:2012-05-15 15:24:11 铁扇公主日期:2012-02-21 15:02:40 2012新春纪念徽章日期:2012-02-13 15:13:51 2012新春纪念徽章日期:2012-02-13 15:13:51 2012新春纪念徽章日期:2012-02-13 15:13:51 2012新春纪念徽章日期:2012-02-13 15:13:51
3#
  发表于 2009-6-29 15:49:53  | 只看该作者
原帖由  anlinew 于 2009-6-29 15:19 发表 
首先要搞清楚为什么用nolock会比较慢




新导入的库,查询一个40万笔记录的 table, 使用nolock只需要5~8秒(nolock可以避开锁), 不使用居然要15秒钟:

select   * from   labels_test ;  
select   * from   labels_test (nolock) ;   


多次测试一样 。 




就做那个让你最不安的事情,因为它能发挥你最大的潜能。


常去的几个站:

  Documentation Library   |  
dba-oracle   |  Oracle Document   |   DBA Support  |   
OCP Study  |  Blog  |  Space  |  
IXDBA  |  MS TechNet  |  Oracle数据库文档 |  
Oracle86中文翻译 | MS BI开拓者 | IXORA | Hello DBA | 
Oracle OTN文章  | 
TaoBao DBA技术网 | MS SQL官方论坛  |  Yong's Web
|  EBS R12 Documents |  EBS eTRM Documents | 
Oracle DBA – Tips and Techniques
 
   

精华贴数
0
专家积分
1
技术积分
2683
社区积分
93
注册时间
2006-3-9
论坛徽章:
14
会员2007贡献徽章日期:2007-09-26 18:42:10 生肖徽章2007版:鸡日期:2009-10-29 16:15:30 生肖徽章2007版:兔日期:2009-04-14 19:32:34 生肖徽章2007版:猴日期:2008-11-28 10:39:32 奥运会纪念徽章:摔跤日期:2008-08-12 10:59:32 奥运会纪念徽章:艺术体操日期:2008-08-07 09:43:42 奥运会纪念徽章:举重日期:2008-05-04 17:12:35 生肖徽章2007版:鼠日期:2008-01-02 17:35:53 生肖徽章2007版:牛日期:2008-01-02 17:35:53 生肖徽章2007版:虎日期:2008-01-02 17:35:53 生肖徽章2007版:兔日期:2008-01-02 17:35:53 生肖徽章2007版:猴日期:2008-01-02 17:35:53
4#
  发表于 2009-6-29 16:42:18  | 只看该作者
不用nolock会快些毕竟少了锁的开销,但是会有查到未提交读的风险,所以使用还是谨慎些吧
 
 
   

注册会员

一般会员

精华贴数
0
专家积分
29
技术积分
2202
社区积分
8
注册时间
2004-8-21
论坛徽章:
11
ITPUB新首页上线纪念徽章日期:2007-10-20 08:38:44 2014年新春福章日期:2014-02-18 16:41:11 灰彻蛋日期:2013-07-26 09:38:24 灰彻蛋日期:2013-07-01 13:12:27 2013年新春福章日期:2013-02-25 14:51:24 灰彻蛋日期:2012-12-04 13:10:24 2012新春纪念徽章日期:2012-01-04 11:49:54 灰彻蛋日期:2011-12-06 21:29:03 祖国60周年纪念徽章日期:2009-10-09 08:28:00 奥运会纪念徽章:摔跤日期:2008-08-03 07:23:35 马上有车日期:2014-02-18 16:41:11
5#
  发表于 2009-6-29 22:10:39  | 只看该作者
原帖由  tolywang 于 2009-6-29 15:49 发表 
  



新导入的库,查询一个40万笔记录的 table, 使用nolock只需要5~8秒(nolock可以避开锁), 不使用居然要15秒钟:

select   * from   labels_test ;  
select   * from   labels_test (nolock) ;   


多次测试一样 。 





测试的结果是用nolock快吧..用nolock是不用锁的,减少开销.如果不用nolock的话则看是什么隔离级别再用对应的锁...
站内私信
 
   

版主

初级会员

精华贴数
5
专家积分
79
技术积分
14767
社区积分
4505
注册时间
2003-8-11
论坛徽章:
114
授权会员日期:2005-10-30 17:05:33 2013年新春福章日期:2013-02-25 14:51:24 青年奥林匹克运动会-铁人三项日期:2014-09-17 10:51:20 奔驰日期:2013-08-01 21:18:36 宝马日期:2013-12-04 21:52:28 2014年新春福章日期:2014-02-18 16:41:11 马上有车日期:2014-02-18 16:41:11 马上有车日期:2014-02-19 11:55:14 马上有房日期:2014-02-19 11:55:14 马上有钱日期:2014-02-19 11:55:14 马上有对象日期:2014-02-19 11:55:14 马上加薪日期:2014-02-19 11:55:14
6#
  发表于 2009-6-29 22:58:33  | 只看该作者
用不用还是看业务
如果业务上可以避免问题,用也很正常

[ 本帖最后由 花好月不圆 于 2009-6-29 22:59 编辑 ]
 
 
   

注册会员

老会员

精华贴数
0
专家积分
0
技术积分
1532
社区积分
1653
注册时间
2003-2-22
论坛徽章:
26
授权会员日期:2005-10-30 17:05:33 生肖徽章2007版:虎日期:2009-07-01 20:13:51 生肖徽章2007版:兔日期:2009-07-12 17:46:54 2009日食纪念日期:2009-07-22 09:30:00 祖国60周年纪念徽章日期:2009-10-09 08:28:00 2010新春纪念徽章日期:2010-03-01 11:21:02 ITPUB9周年纪念徽章日期:2010-10-08 09:28:52 2010广州亚运会纪念徽章:三项全能日期:2010-11-13 19:43:55 2011新春纪念徽章日期:2011-02-18 11:43:32 2012新春纪念徽章日期:2012-01-04 11:49:54 ITPUB十周年纪念徽章日期:2011-11-01 16:19:41 奥运会纪念徽章:体操日期:2012-10-22 16:59:00
7#
  发表于 2009-6-30 07:43:37  | 只看该作者
如果是SQL Server 2005以上版本,则可以开启read_committed_snapshot选项,避免读写等待的发生。
lawzjf.itpub.net
 
   

版主

按妞

招聘 :  Java研发
精华贴数
6
专家积分
236
技术积分
13367
社区积分
962
注册时间
2002-11-4
认证徽章
论坛徽章:
71
马上加薪日期:2014-02-19 11:55:14 ITPUB 11周年纪念徽章日期:2012-10-09 18:05:07 奥运会纪念徽章:网球日期:2012-08-23 14:58:08 奥运会纪念徽章:沙滩排球日期:2012-07-19 17:28:14 版主2段日期:2012-07-07 02:21:02 2012新春纪念徽章日期:2012-02-13 15:13:51 2012新春纪念徽章日期:2012-02-13 15:13:51 2012新春纪念徽章日期:2012-02-13 15:13:51 2012新春纪念徽章日期:2012-02-13 15:13:51 2012新春纪念徽章日期:2012-02-13 15:13:51 茶鸡蛋日期:2011-12-01 10:35:20 2012新春纪念徽章日期:2012-01-04 11:49:54
8#
  发表于 2009-6-30 10:17:43  | 只看该作者
原帖由  tolywang 于 2009-6-29 15:49 发表 
  



新导入的库,查询一个40万笔记录的 table, 使用nolock只需要5~8秒(nolock可以避开锁), 不使用居然要15秒钟:

select   * from   labels_test ;  
select   * from   labels_test (nolock) ;   


多次测试一样 。 




有并发吗?
set statistics io on
set statistics time on
分别执行
看消息列结果
_________________________________________________
 
   

版主

按妞

招聘 :  Java研发
精华贴数
6
专家积分
236
技术积分
13367
社区积分
962
注册时间
2002-11-4
认证徽章
论坛徽章:
71
马上加薪日期:2014-02-19 11:55:14 ITPUB 11周年纪念徽章日期:2012-10-09 18:05:07 奥运会纪念徽章:网球日期:2012-08-23 14:58:08 奥运会纪念徽章:沙滩排球日期:2012-07-19 17:28:14 版主2段日期:2012-07-07 02:21:02 2012新春纪念徽章日期:2012-02-13 15:13:51 2012新春纪念徽章日期:2012-02-13 15:13:51 2012新春纪念徽章日期:2012-02-13 15:13:51 2012新春纪念徽章日期:2012-02-13 15:13:51 2012新春纪念徽章日期:2012-02-13 15:13:51 茶鸡蛋日期:2011-12-01 10:35:20 2012新春纪念徽章日期:2012-01-04 11:49:54
9#
  发表于 2009-6-30 10:50:17  | 只看该作者
除了nolock 
sql server 还提供了READPAST
_________________________________________________
 
   

注册会员

念安

精华贴数
3
专家积分
11
技术积分
1164
社区积分
1
注册时间
2005-4-1
论坛徽章:
2
CTO参与奖日期:2009-01-15 11:42:46 2009日食纪念日期:2009-07-22 09:30:00
10#
  发表于 2009-6-30 22:03:32  | 只看该作者
这是数据库机制问题,也不能说好还是坏,只是用途不一样!

版主

高级会员

精华贴数
4
专家积分
94
技术积分
22640
社区积分
4717
注册时间
2003-1-23
认证徽章
论坛徽章:
71
'2015年新春福章 '2013年新春福章 '双黄蛋 '蜘蛛蛋 '茶鸡蛋 'ITPUB 11周年纪念徽章 '版主2段 '铁扇公主 '2012新春纪念徽章 '2012新春纪念徽章 '2012新春纪念徽章 '2012新春纪念徽章
跳转到指定楼层
1#
  发表于 2009-6-29 14:48:17  | 只看该作者  | 倒序浏览
SQL Server 比较奇怪, Select 语句如果不使用 nolock  会比较慢 ,使用nolock数据会有错误 ( 对于那些
对及时性要求严格的数据来说 ) , 使用nolock 时可能还没有提交的数据会被查询出来, 资料上的原话 :  如果
是金融方面的代码或者一些非常规的总计(你想绝对保证安全性),应该小心行事并且不使用nolock这种技术。


大家一般写SQL语句会使用nolock 或 rowlock这种技术么  ?   SQL Server这样设计也未免太不负责任了 。

就做那个让你最不安的事情,因为它能发挥你最大的潜能。


常去的几个站:

  Documentation Library   |  
dba-oracle   |  Oracle Document   |   DBA Support  |   
OCP Study  |  Blog  |  Space  |  
IXDBA  |  MS TechNet  |  Oracle数据库文档 |  
Oracle86中文翻译 | MS BI开拓者 | IXORA | Hello DBA | 
Oracle OTN文章  | 
TaoBao DBA技术网 | MS SQL官方论坛  |  Yong's Web
|  EBS R12 Documents |  EBS eTRM Documents | 
Oracle DBA – Tips and Techniques
 
   

版主

按妞

招聘 :  Java研发
精华贴数
6
专家积分
236
技术积分
13367
社区积分
962
注册时间
2002-11-4
认证徽章
论坛徽章:
71
'马上加薪 'ITPUB 11周年纪念徽章 '奥运会纪念徽章:网球 '奥运会纪念徽章:沙滩排球 '版主2段 '2012新春纪念徽章 '2012新春纪念徽章 '2012新春纪念徽章 '2012新春纪念徽章 '2012新春纪念徽章 '茶鸡蛋 '2012新春纪念徽章
2#
  发表于 2009-6-29 15:19:58  | 只看该作者
首先要搞清楚为什么用nolock会比较慢
_________________________________________________
 
   

版主

高级会员

精华贴数
4
专家积分
94
技术积分
22640
社区积分
4717
注册时间
2003-1-23
认证徽章
论坛徽章:
71
'2015年新春福章 '2013年新春福章 '双黄蛋 '蜘蛛蛋 '茶鸡蛋 'ITPUB 11周年纪念徽章 '版主2段 '铁扇公主 '2012新春纪念徽章 '2012新春纪念徽章 '2012新春纪念徽章 '2012新春纪念徽章
3#
  发表于 2009-6-29 15:49:53  | 只看该作者
原帖由  anlinew 于 2009-6-29 15:19 发表 
首先要搞清楚为什么用nolock会比较慢




新导入的库,查询一个40万笔记录的 table, 使用nolock只需要5~8秒(nolock可以避开锁), 不使用居然要15秒钟:

select   * from   labels_test ;  
select   * from   labels_test (nolock) ;   


多次测试一样 。 




就做那个让你最不安的事情,因为它能发挥你最大的潜能。


常去的几个站:

  Documentation Library   |  
dba-oracle   |  Oracle Document   |   DBA Support  |   
OCP Study  |  Blog  |  Space  |  
IXDBA  |  MS TechNet  |  Oracle数据库文档 |  
Oracle86中文翻译 | MS BI开拓者 | IXORA | Hello DBA | 
Oracle OTN文章  | 
TaoBao DBA技术网 | MS SQL官方论坛  |  Yong's Web
|  EBS R12 Documents |  EBS eTRM Documents | 
Oracle DBA – Tips and Techniques
 
   

精华贴数
0
专家积分
1
技术积分
2683
社区积分
93
注册时间
2006-3-9
论坛徽章:
14
'会员2007贡献徽章 '生肖徽章2007版:鸡 '生肖徽章2007版:兔 '生肖徽章2007版:猴 '奥运会纪念徽章:摔跤 '奥运会纪念徽章:艺术体操 '奥运会纪念徽章:举重 '生肖徽章2007版:鼠 '生肖徽章2007版:牛 '生肖徽章2007版:虎 '生肖徽章2007版:兔 '生肖徽章2007版:猴
4#
  发表于 2009-6-29 16:42:18  | 只看该作者
不用nolock会快些毕竟少了锁的开销,但是会有查到未提交读的风险,所以使用还是谨慎些吧
 
 
   

注册会员

一般会员

精华贴数
0
专家积分
29
技术积分
2202
社区积分
8
注册时间
2004-8-21
论坛徽章:
11
'ITPUB新首页上线纪念徽章 '2014年新春福章 '灰彻蛋 '灰彻蛋 '2013年新春福章 '灰彻蛋 '2012新春纪念徽章 '灰彻蛋 '祖国60周年纪念徽章 '奥运会纪念徽章:摔跤 '马上有车
5#
  发表于 2009-6-29 22:10:39  | 只看该作者
原帖由  tolywang 于 2009-6-29 15:49 发表 
  



新导入的库,查询一个40万笔记录的 table, 使用nolock只需要5~8秒(nolock可以避开锁), 不使用居然要15秒钟:

select   * from   labels_test ;  
select   * from   labels_test (nolock) ;   


多次测试一样 。 





测试的结果是用nolock快吧..用nolock是不用锁的,减少开销.如果不用nolock的话则看是什么隔离级别再用对应的锁...
站内私信
 
   

版主

初级会员

精华贴数
5
专家积分
79
技术积分
14767
社区积分
4505
注册时间
2003-8-11
论坛徽章:
114
'授权会员 '2013年新春福章 '青年奥林匹克运动会-铁人三项 '奔驰 '宝马 '2014年新春福章 '马上有车 '马上有车 '马上有房 '马上有钱 '马上有对象 '马上加薪
6#
  发表于 2009-6-29 22:58:33  | 只看该作者
用不用还是看业务
如果业务上可以避免问题,用也很正常

[ 本帖最后由 花好月不圆 于 2009-6-29 22:59 编辑 ]
 
 
   

注册会员

老会员

精华贴数
0
专家积分
0
技术积分
1532
社区积分
1653
注册时间
2003-2-22
论坛徽章:
26
'授权会员 '生肖徽章2007版:虎 '生肖徽章2007版:兔 '2009日食纪念 '祖国60周年纪念徽章 '2010新春纪念徽章 'ITPUB9周年纪念徽章 '2010广州亚运会纪念徽章:三项全能 '2011新春纪念徽章 '2012新春纪念徽章 'ITPUB十周年纪念徽章 '奥运会纪念徽章:体操
7#
  发表于 2009-6-30 07:43:37  | 只看该作者
如果是SQL Server 2005以上版本,则可以开启read_committed_snapshot选项,避免读写等待的发生。
lawzjf.itpub.net
 
   

版主

按妞

招聘 :  Java研发
精华贴数
6
专家积分
236
技术积分
13367
社区积分
962
注册时间
2002-11-4
认证徽章
论坛徽章:
71
'马上加薪 'ITPUB 11周年纪念徽章 '奥运会纪念徽章:网球 '奥运会纪念徽章:沙滩排球 '版主2段 '2012新春纪念徽章 '2012新春纪念徽章 '2012新春纪念徽章 '2012新春纪念徽章 '2012新春纪念徽章 '茶鸡蛋 '2012新春纪念徽章
8#
  发表于 2009-6-30 10:17:43  | 只看该作者
原帖由  tolywang 于 2009-6-29 15:49 发表 
  



新导入的库,查询一个40万笔记录的 table, 使用nolock只需要5~8秒(nolock可以避开锁), 不使用居然要15秒钟:

select   * from   labels_test ;  
select   * from   labels_test (nolock) ;   


多次测试一样 。 




有并发吗?
set statistics io on
set statistics time on
分别执行
看消息列结果
_________________________________________________
 
   

版主

按妞

招聘 :  Java研发
精华贴数
6
专家积分
236
技术积分
13367
社区积分
962
注册时间
2002-11-4
认证徽章
论坛徽章:
71
'马上加薪 'ITPUB 11周年纪念徽章 '奥运会纪念徽章:网球 '奥运会纪念徽章:沙滩排球 '版主2段 '2012新春纪念徽章 '2012新春纪念徽章 '2012新春纪念徽章 '2012新春纪念徽章 '2012新春纪念徽章 '茶鸡蛋 '2012新春纪念徽章
9#
  发表于 2009-6-30 10:50:17  | 只看该作者
除了nolock 
sql server 还提供了READPAST
_________________________________________________
 
   

注册会员

念安

精华贴数
3
专家积分
11
技术积分
1164
社区积分
1
注册时间
2005-4-1
论坛徽章:
2
'CTO参与奖 '2009日食纪念
10#
  发表于 2009-6-30 22:03:32  | 只看该作者
这是数据库机制问题,也不能说好还是坏,只是用途不一样!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值