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