关于锁隔离级别的一个问题,欢迎发表意见

回南山种豆 2010-12-22 11:47:41
在SQL SERVER 2005、2008中,查询优化器通常为查询选择最优的的一个执行计划,因此建议:只有经验丰富的开发人员才指定表提示,否则多指定事物隔离级别,表提示有查询优化器自动指定
这是在书上看的一个注意事项
这查询优化器到底能够处理到什么程度?并且一旦制定了表提示,那么我做的事物隔离级别不是可能被查询优化器指定的表提示所覆盖吗?
欢迎大家发表个人看法交流
...全文
105 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
回南山种豆 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ohfox 的回复:]
查询提示是最后的最细的控制
假如你强制使用一个表的索引,哪怕是用索引会导致比全表扫瞄更多的IO和时间,数据库也会去使用这个索引的

sqlserver2005默认的隔离级别是悲观锁定下的read committed,写会阻塞读,读也会阻塞写.
我刚从oracle转过来写TSQL的时候就郁闷了较长时间,因为不知道sqlserver是这种机制的.我的查询常常被组塞住.
其实默认的隔离级别处理……
[/Quote]
谢谢...
cxmcxm 2010-12-23
  • 打赏
  • 举报
回复
如果不是人工指定锁,查询优化器是不可能更改查询,而破坏指定的隔离级别的。
编程的规则已定,MS爱如何优化是他的事,优化只会加快程序执行速度,不会破坏到规则层面的东东。否则就是BUG!
dawugui 2010-12-23
  • 打赏
  • 举报
回复
1 如何锁一个表的某一行

A 连接中执行

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

begin tran

select * from tablename with (rowlock) where id=3

waitfor delay '00:00:05'

commit tran

B连接中如果执行

update tablename set colname='10' where id=3 --则要等待5秒

update tablename set colname='10' where id<>3 --可立即执行

2 锁定数据库的一个表

SELECT * FROM table WITH (HOLDLOCK)


注意: 锁定数据库的一个表的区别

SELECT * FROM table WITH (HOLDLOCK)
其他事务可以读取表,但不能更新删除

SELECT * FROM table WITH (TABLOCKX)
其他事务不能读取表,更新和删除
ohfox 2010-12-23
  • 打赏
  • 举报
回复
提示肯定是能覆盖查询优化器自动选择的执行计划的

sqlserver之所以不太建议手工指定,是考虑到查询分析器对表的动态统计数据掌握的信息,比当时指定提示的那个人要多,而且持久.
表的数据可能变化的比较快,最初人手工指定的符合当时那个情景的提示不一定适用于今后的表的状况
ohfox 2010-12-23
  • 打赏
  • 举报
回复
查询提示是最后的最细的控制
假如你强制使用一个表的索引,哪怕是用索引会导致比全表扫瞄更多的IO和时间,数据库也会去使用这个索引的

sqlserver2005默认的隔离级别是悲观锁定下的read committed,写会阻塞读,读也会阻塞写.
我刚从oracle转过来写TSQL的时候就郁闷了较长时间,因为不知道sqlserver是这种机制的.我的查询常常被组塞住.
其实默认的隔离级别处理大部分的事情就足够了,它没法避免不可重复读和幻想读的情况.你想想你有没有这样的事物要求
回南山种豆 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ohfox 的回复:]
提示肯定是能覆盖查询优化器自动选择的执行计划的

sqlserver之所以不太建议手工指定,是考虑到查询分析器对表的动态统计数据掌握的信息,比当时指定提示的那个人要多,而且持久.
表的数据可能变化的比较快,最初人手工指定的符合当时那个情景的提示不一定适用于今后的表的状况
[/Quote]

提示肯定是能覆盖查询优化器自动选择的执行计划的

如果我用隔离级别,那么查询优化器是按他自己的方式制定表提示,我的隔离级别还有用没?
你平时都用什么?

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧