1.索引的本质

索引是帮助MySQL高效获取数据的排好序的数据结构。 索引数据结构: 二叉树 红黑树 Hash表 B-Tree

2.索引数据库解析

数据结构可视化工具usfca:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 红黑树: JDK1.8以前的HashMap底层:数组+链表 JDK1.8:数组+链表+红黑树 红黑树也是一个二叉树,叫做平衡二叉树。

3.B树结构详解

3.1 B-Tree

页节点具有相同的深度,叶节点的指针为空 所有索引元素不重复 节点中的数据索引从左到右递增排列

3.2 B+Tree(B-Tree变种)

多叉平衡树 非叶子节点不存储data,只存储索引(冗余),可以放更多的索引 叶子节点包含所有索引字段 叶子节点用指针连接,提高区间访问的性能 查看叶节点(默认是16K),一次加载16K:show global status line 'Innodb_page_size'

4.MyISAM存储引擎

MyISAM存储引擎文件和数据库文件是分离的(非聚集) 创建表的可以选择引擎

test_myisam.fm 表结构 test_myisam.MVD 数据 test_myisam.MYI 索引

5.InnoDB存储引擎(聚集)

表数据文件本身就按B+Tree组织的一个索引接口文件 聚集索引-叶节点包含了完整的数据记录 为什么InnoDB表必须有主键,并且推荐使用整型的自增组件 为什么非主键索引结构叶子节点存储的是主键值?一致性和节省存储空间 frm 表结构 idb 索引和数据