亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

秒殺的高并發分析 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下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號