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 索引和数据