MySql索引介绍,B-tree和B+tree的区别
索引介绍
索引是一个特殊排好序的数据结构,能够帮助我们快速的获取数据
索引数据结构
二叉树
红黑树
Hash表
B-Tree
B+Tree
B-Tree和B+Tree介绍和区别
什么是B-Tree
B-Tree叶子节点具有相同的深度,叶子节点的指针为空
所有索引元素不重复
节点中的数据索引从左到右递增排序
B+Tree
B+Tree非叶子节点不存储data,只存储索引(冗余),可以放更多的索引
叶子节点包含所有索引字段
叶子节点用指针连接,提高区间访问的性能
可以通过此链接模拟各种索引
B-Tree和B+Tree的区别
- B-Tree 的关键字和记录是放在一起的,叶子节点可以看作外部节点,不包含任何信息;B+Tree 的
非叶子节点中只有关键字和指向下一个节点的索引,记录只放在叶子节点中。 - 在 B-Tree 中,越靠近根节点的记录查找时间越快,只要找到关键字即可确定记录的存在;而
B+Tree 中每个记录的查找时间基本是一样的,都需要从根节点走到叶子节点,而且在叶子节点中
还要再比较关键字。从这个角度看 B-Tree 的性能好像要比 B+Tree 好,而在实际应用中却是
B+Tree 的性能要好些。因为 B+Tree 的非叶子节点不存放实际的数据,这样每个节点可容纳的元
素个数比 B-Tree 多,树高比 B-Tree 小,这样带来的好处是减少磁盘访问次数。尽管 B+Tree 找到
一个记录所需的比较次数要比 B-Tree 多,但是一次磁盘访问的时间相当于成百上千次内存比较的
时间,因此实际中 B+Tree 的性能可能还会好些,而且 B+Tree 的叶子节点使用指针连接在一起,
方便顺序遍历(例如查看一个目录下的所有文件,一个表中的所有记录等),这也是很多数据库和
文件系统使用 B+Tree 的缘故
Hash索引
Mysql存储引擎
MyISAM(非聚集)
存储的数据结构:
.frm:表结构
.myd:数据文件
.myI:索引文件
索引文件图:
InnoDB(聚集)
存储的数据结构:
.frm:表结构
.iBD:索引文件
索引文件图: