1、mysql InnoDB引擎默認的是行鎖,那麼什麼情況下導致表鎖?
行鎖是根據索引查找到那行,找到那幾行進行鎖定,纔可以進行更新。所以產生表鎖有可能是要麼沒有索引,要麼就是索引失效。
2、索引失效的幾種。
1、主鍵索引 ,where 字段 like 以%開頭。
2、組合(複合)索引 ,沒有遵循最左匹配原則。
ALTER TABLE `table` ADD INDEX name_city_age (name,city,age);
select * from table where city=xxx and age = xxx;
這種情況下組合索引是不會起作用的,因爲第一個name沒有作爲條件,在B+樹裏邊根本找不到對應的行,所以只好全表掃描,後續更新,mysql鎖的就是整張表了。
3、壓根沒有主鍵還有索引。
4、where or 所有條件必須添加索引。
5、對索引使用了函數。
3、索引排查 ====explain