一些八股
MySQL索引
最左模糊匹配也不一定索引失效,比如只有主键和name字段(name有索引),对name进行左模糊匹配,会走[全扫描二级索引树],因为用到了覆盖索引
group by和order by的字段不一样时,会触发using temporary,因为需要先分组,再对分组的字段(创建临时表)进行排序。如果对分组和排序的字段建立
联合索引,就不会触发using temporary。
B+树非叶子节点存放
索引键值(主键索引就是主键值,二级索引就是索引值)+指向子节点的指针(实际是页号)
锁
唯一索引冲突
场景: 事务 A 插入一条记录 (id=10),此时 A 持有该记录的 X 型记录锁。(如果是唯一二级索引,会从隐式锁变为X型记录锁) 事务 B 也尝试插入 (id=10)。
结果: 事务 B 会检测到唯一键冲突。在报错之前,它必须等待事务 A 提交或回滚(因为如果 A 回滚了,B 就能插入成功)。 在此期间,事务 B 会申请一个 S 型临键锁 (S Next-Key Lock) 锁住该记录及之前的间隙。
注意:如果是主键冲突,通常申请的是 S 型记录锁;如果是唯一二级索引冲突,申请的是 S 型临键锁。