- B+树存储,叶子节点双向链表;
- 索引(聚集索引/辅助聚集索引)
- 聚集:叶子节点逻辑顺序存放整张表的行记录数据(对主键的排序查找/范围查找非常快);
- 非聚集:叶子节点除包含键值外还包含一个书签(bookmark),告诉InnoDB存储引擎哪里可以找到与索引对应的行数据,因此辅助索引的书签就是相应行数据的聚集索引键;
- 索引的使用
- 字段高选择性,选择表中少行的原则(大概20%以下),否则扫描全表;可解释为什么符合索引(a,b,c)a=1&b>2&c=4的中断问题
- 提高读性能,引入了预读取(随机预读取/顺序预读取),一次IO读取多页数据到缓冲区
- 因为辅助索引不包含整行数据,一页存取量更多,所以总是先从辅助索引的叶子结点判断是否能得到所需数据。
- 复合索引每列数据都是有序的
- 查询某列,该列即建立了主键索引,又是复合索引的首部,只用到主键索引,(叶子节点存储更多,且不会通过辅助聚集索引再查聚集索引)where a=1 order by b 会走复合索引依据复合索引的列都是有序的,不会通过主键a的索引查出后再对b进行排序