SqlServer MySQL 并发_SqlServer性能优化 提高并发性能二(九)

本文介绍了SQL Server和MySQL中提高并发性能的方法,重点关注了使用非聚集索引优化更新操作,并详细阐述了不同事务隔离级别的概念和应用,包括读提交、脏读、已提交快照读、可重复读和串行化,以及它们在并发访问控制中的影响和避免死锁的策略。
摘要由CSDN通过智能技术生成

补充上一篇修改用非聚集索引:

update Employee set age=age+1 from Employee with(index=nc_Employee_Age) where age<30

执行计划:

66c1b24992b338100b8689673af6c594.png

并发访问控制隔离级别:

1.读提交:默认行为,读取时请求S锁

set transaction isolation level read committed

select * from Employee where age=34

2.   脏读:读取时不请求S锁,不会受到其他X锁限制

set transaction isolation level read uncommitted

select * from Employee

3. 已提交快照读:更新时将老的数据复制到 Tempdb:read_committed_snapshot

alter database HRDB

set read_committed_snapshot on

设置成单用户模式:

c06ed66a7089724288e0c7a2f3a7acbb.png

设置事物:

begin tran

update Employee set age=age+1 where age>=30

执行语句:

select * from Employee

acf011ad9aa06f073815f2b228d27106.png

这条语句也可以执行:

select * from Employee where age>30

这条可以执行:

update Employee set age=age+1 from Employee with(index=nc_Employee_Age) where age<30

没有复制的还是从索引或基表中读取。所以可以读取出数据

这条不能执行:

update Employee set age=age+1 from Employee with(index=nc_Employee_Age) where age>30

打开数据库的读提交快照。 对记录进行操作时,会把排他锁的数据放到Tempdb数据库中,访问的时候直接读出Tempdb的数据。

4.可重复读:事物结束前,不释放获取的S锁,可能会形成死锁

create table Products(id int identity(1,1),name varchar(500),UnitPrice money)

delete from Products where id=2

insert Products values ('p1',13)

insert Products values('

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值