1. 程式人生 > >無索引時行鎖升級為表鎖測試

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

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

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

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

過程如下:

表中的a b都是無索引的

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

執行B的更新

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

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