为了账号安全,请及时绑定邮箱和手机立即绑定

秒杀的高并发分析 insert和update为什么要颠倒过来

我知道使用为了优化,但是不知道为什么。

正在回答

3 回答

原来执行的流程

update(发送在mysql网络时间+gc时间) + insert(发送在mysql网络时间+gc时间)

因为update同一行会导致行级锁,而insert是可以并行执行的。

1.如果先update, update在前面会加锁

锁 + update(发送在mysql网络时间+gc时间) + insert(发送在mysql网络时间+gc时间) + 提交锁

其实的线程就要等,这个锁提交才能执行。

2.如果先insert,

insert(发送在mysql网络时间+gc时间) +  锁+ update(发送在mysql网络时间+gc时间) + 提交锁

其实的线程可以并发insert. 这样子会减少锁的时长



2 回复 有任何疑惑可以回复我~
#1

慕粉18810003712 提问者

貌似清晰了 谢谢 原来如果先update后insert会多人竞争行级锁直到insert结束。反过来就少了insert占用锁的时间 soga
2017-06-21 回复 有任何疑惑可以回复我~
#2

慕村8951117

你的意思也就是说 比如 A B C D E F...这些比如他们都是一个线程 A线程 去执行 insert +update 然后后面的线程比如b 他可以在前面那个线程A在阻塞update时候 就可以在这个堵塞时间把insert执行完毕 相当于省去了insert 只有update , 如何是先update 就会在此堵塞 完成insert操作 commit/rollback 我理解对吗
2018-01-16 回复 有任何疑惑可以回复我~

https://blog.csdn.net/and1kaney/article/details/51214001

看场景二。

insert是会加锁的,但是这个锁不影响同时插入。什么叫并发?并发指的是多线程对统一资源进行争夺。但是当我们对同一张表中并发写入的时候,对什么资源进行争夺了呢?从场景2中可以很明显的看出,当有两个事物都在insert的时候,在commit之前都可以插入。

好的,那解释一下为什么insert要放在update之前:

1.因为insert的通过用户id+商品id作为联合主键,因此实际上插入操作是可以并行的。2.如果某个用户多次刷新提交数据,都会被判定为是无效数据,无需update。

1 回复 有任何疑惑可以回复我~

简单来讲就是insert在后面的话就会等锁竞争,放到前面了insert就可以并行执行了,当中就少了insert占用的时间了,放后面会等两个锁竞争,放前面就等一个锁。

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

秒杀的高并发分析 insert和update为什么要颠倒过来

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信