MySQL索引(一)——索引概念及索引数据结构

tech2022-07-07  197

MySQL索引(一)——索引概念及索引数据结构

概念索引的数据结构种类二叉树红黑树Hash表B TreeB+Tree

概念

索引是帮助MySQL高效获取数据的排好序的数据结构(B+Tree),可以理解为一本字典的通过目录找到具体索要查询数据的位置。

例: 假如我们现在要执行select * from t where t.col2=89:

1.不用索引过程:数据库会从上到下去查找,查询顺序为:34、77、5、91、22、89。

2.给col2创建索引之后的查找:第一次查找到34,因为89>34,所以查找34的右孩子,然后找到89。

索引的数据结构种类

二叉树

缺点:针对于col1简历索引,因为索引是排好序的(为什么排好序,下面会介绍),所以当按照顺序建立索引的时候会发现建立出来的结构如下图: 他会变成一个链表,对于查询没有丝毫优化。

红黑树

缺点:红黑树相对于二叉树当深度相差过大的时候会发生自旋来平衡二叉树,但对于数据库百万数据存储也会导致红黑树的高度不可控。 如上图,当数据为7条的时候就需要3次查询了。

Hash表

B Tree

引入:每一个节点通过横向衍生从而来控制高度,从而减少树的高度。

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

B+Tree

引入:因为B Tree每个节点都存储了data,占用了大量空间,所以为了尽量在相同的层数存储更多的数据,引出了B+Tree。 特点: 1.非叶子节点不存储data,只存储索引(冗余),可以放更多的索引。 对于B+Tree,每次读出的一个节点(如上图)就是磁盘中的一页数据,一页数据大小为16kb,所以如果要保证一页数据包含的数据量更多,就更多的存储索引而不去存储他的data(data所占空间比索引所占空间要大得多)

2.叶子节点包含所有索引字段。

3.叶子节点用指针连接,提高区间访问的性能。

最新回复(0)