無索引時行鎖升級爲表鎖測試

今天看到簡朝陽的書上的一句話,如下:

當Query無法利用索引的時候,Innodb會放棄使用行級別鎖定而改用表級別鎖定,造成併發效率的降低。

看到這句話,開始讓我有種不信的感覺,所以親自測試下,MYSQL版本爲5.5,

過程如下:

表中的a b都是無索引的

開啓兩個事務,事務A進行更新,之後事務B也進行更新,但是更新的是不同的兩行。結果如下

執行B的更新

我們看到B事務此時阻塞,結果和書上說的一樣,有些吃驚,這麼說寫操作一定要注意where條件了,一定要使用索引來避免全表鎖定。

因爲Innodb是基於索引來實現行鎖的,如果不存在索引,那麼就不能對此行加record lock,而mysql爲了防止錯誤,只好全部鎖定了。

發佈了44 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章