问答详情
源自:3-1 秒杀操作-并发优化-1

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

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

提问者:慕粉18810003712 2017-06-20 10:02

个回答

  • kevinyangit
    2017-06-21 13:04:32
    已采纳

    原来执行的流程

    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. 这样子会减少锁的时长



  • Sonihr
    2019-03-14 22:24:37

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

    看场景二。

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

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

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

  • qq_Sebtimental丶_23564747
    2018-07-29 17:35:34

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