作者回复: 1. 好问题。你可以理解为要在索引c上插入一个(c=5,id=0)这一行,是落在(0,5],(5,10]里面的,11可以对吧
2. 嗯,主键索引的间隙上也要有Gap lock保护的
作者回复: 对, innodb_locks_unsafe_for_binlog 这个参数就是这个意思 “不加gap lock”,
这个已经要被废弃了(8.0就没有了),所以不建议设置哈,容易造成误会。
如果真的要去掉gap lock,可以考虑改用RC隔离级别+binlog_format=row
作者回复: 精力花了没事,睡一觉醒来还是一条好汉😄
主要还是得大家有收获,我就值了😄
作者回复: 是的,这个其实就是为啥总结规则有点麻烦,有时候只是因为代码是这么写的😓
作者回复: 优秀
作者回复: 感觉你下一篇看起来会很轻松了哈👍🏿
作者回复: 因为d上没有索引,这个语句要走全表扫描
作者回复: 1. 在锁方面你们dba说的基本是对的。一开始和结束有写锁,执行中间40分钟只有读锁
但是1000万的表要做40分钟,可能意味着系统压力大(或者配置偏小),这样可能不是没影响对,比较这个操作还是要吃IO和CPU的
2. 嗯,innodb引擎是这样的。
作者回复: 看下08篇哦,
里面有介绍到行锁
还有问题再在那个文章下面发哈
作者回复: 由于有metadata lock,意向锁其实没什么作用了,所以不会专门介绍哦,可能会在讨论其他问题的时候顺便带一下
作者回复: 是的,update、delete语句用不上索引是很恐怖的😄
作者回复: 谢谢你的肯定。
嗯死锁分析会有一篇专门说。
不过你可以提前说一下碰到的疑问😄
作者回复: 读提交隔离级别一般没有gap lock,不过也有例外情况, 比如insert 出现主键冲突的时候,也可能加间隙锁
作者回复: 好问题
Insert...select 是会给select部分加读锁的
这个也是为了保证一致性