MySQL常见面试题
存储引擎对比
- InnoDB中主键索引和数据放在一起,主键索引的B+树里放完整的数据行;MyISAM中索引和数据分开放,B树里存索引值和该行的物理地址
- InnoDB 支持 ACID 事务,MyISAM 不支持
- InnoDB支持行级锁,MyISAM 不支持
InnoDB的可重复读隔离级别下解决幻读
对于快照读(普通SELECT):通过MVCC,可重复读隔离级别,在事务第一次查询时创建ReadView
对于当前读(SELECT…FOR UPDATE/LOCK IN SHARE MODE/INSERT/UPDATE/DELETE):通过间隙锁和Next-Key Lock避免幻读。
SELECT * FROM t WHERE id > 100 FOR UPDATE会锁定id>100的所有间隙
其它问题
有一个索引字段b。b = 1 or b = 2 和b in(1,2)哪个执行效率高一点。
b in(1,2)更好
查询优化器在处理 b = 1 OR b = 2 时,它需要将这个查询条件拆分成两个独立的条件,也就是分别处理 b = 1 和 b = 2,然后再将这两个结果合并。