如果真被行锁锁表了又该如何分析排查呢? 别着急, 我们一步一步来, 干货满满, 建议先收藏!后面如果有需要了, 直接能找到这里来看.
----
哪些场景会造成行锁升表锁?...解读:因为InnoDB引擎的 3种行锁算法(Record Lock、Gap Lock、Next-key Lock),都是锁定的索引,当触发X锁(写锁)的where条件无索引 或 索引失效 时, 查找的方式就会变成全表扫描...这里直接用explain说话:
explain 返回的key不是你期望的索引, 而是PRIMARY;
explain 返回的type是index或all
如果同时满足上面这两个条件, 那么就说明索引失效了...关于成本计算, 它是先计算不同索引的I/0成本和CPU成本, 然后进行对比, 哪个成本低就采用哪个索引来执行!...此时, 咱们已经清楚的知道了 可能造成 行锁升表锁 的场景,那么应对起来也就更有底气了,我的建议是:
禁止where条件使用无索引列进行更新/删除
这是我们最应该做到的!