我們都知道for update語句會鎖住一張表,鎖表的細節很多人卻不太清楚,下面我們舉例看下。
在表上我們有個索引,如下:
現在在我們通過索引store_id鎖表:
我們再開一個客戶端,還是鎖住同一個store_id:
現在發現表是鎖住的,我們做不了for update,下面我們換一個store_id來鎖表看下:
我們看到索引的另一個值是沒有被鎖住的。下面我們再看看不鎖索引,鎖普通自斷:
下面我們隨便一個字段再for update:
我們看到隨便一行都被鎖了。
總結:
由此我們可以看到,當for update的字段為索引或者主鍵的時候,只會鎖住索引或者主鍵對應的行。
而當for update的字段為普通字段的時候,Innodb會鎖住整張表。
目前關於索引細節的講解我們就告一段落,但有一點做數據要深記,一個好的數據查詢性能優化要從三方面着手,齊頭並進:
1.表結構優化。2.索引優化。3.查詢語句優化
