Innodb 索引结构
B+tree 相比红黑树可以用更少的磁盘 IO B+tree 相比 Hash 结构和 B-tree,支持范围查询
索引分为聚簇索引和二级索引。 聚簇索引就是包含所有的内容,表数据存于叶子节点上。
通过二级索引一般需要回表查询,但是如果是二级索引是覆盖索引,也就是包含了所有需要的字段,那么就可以不回表了。
联合索引并不是多个索引,而是一个索引结构,按书写顺序来的。
MVCC 原理
MVCC 依赖 undolog + readView + 数据库隐藏字段
readView 是开始读时候的快照,维护了开始时刻活跃事务 id
可见性就是依赖这个活跃事务 idList,如果当前事务(readView 中的相关事务 id) id 比最小的还小,那么可见,比最大的还大,那么不可见,如果在之间,那么就看在不在列表里,如果在,那么就不可见,不在就可见。
如果不可见,那么就会去找 undolog 中的版本链,找到合适的事务 id。比较方法应该还是如上所述。
Explain/ DESC 优化查询
extra 中 filesort 并不是文件排序,加了 order by 之后一般都有。
锁
行锁和表锁
行锁 -》 锁种类:排他锁 (X 锁),共享锁(S 锁)
排他锁中又有:Gap 锁,Record lock, next-key lock(就是 record lock 和 gap lock 的组合)
表锁 -》 意向锁