mysql的索引本质是一颗_mysql索引本质

一、索引帮助mysql高效获取数据排好序的数据结构。

二、索引存储位置:磁盘文件。

三、索引结构:二叉树、红黑树、hash、BTree、B+Tree 。索引结构为了更快找到目标数据。

四、数据结构

4.1、二叉树

定义:每个结点最多有两个子树,左子树比父节点小,右子树比父节点大。

缺点:会出现极端情况导致整棵树只有左子树或只有右子树。

图:

7392269288ced866b34619c2261375b1.png

4.2、红黑树

定义:

性质1. 节点是红色或黑色。

性质2. 根节点是黑色。

性质3 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)

性质4. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

缺点:数据量大会导致树层数比较多,这样就会造成查找数据慢。

图:

d128ac269cc8fdaa085aefc41c6e89e4.png

4.3、hash数据结构

定义:散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 对目标值进行hash运算得到hash值和数据磁盘指针地址保存到hash表,这样就达到快速定位数据位置。

缺点:精确查找十分快速,但范围查找就碰壁了。

图:无

4.4、BTree

定义:一个节点可以存储多个数据,这样可以避免黑红树的缺点,树的层数很变小。

缺点:  节点里面数组数据:每个数据的结构=索引数据+数据记录(即叶子节点存储键值和数据记录)。

图:

23e158e3fc3d2de30fff71dfc2e3e25e.png

4.5、B+Tree

定义:B+Tree是在B-Tree基础上的一种优化。节点里面数组数据:每个数据只存储键信息,这样不存数据可以腾出空间放更多的键信息,让树层数越小。

非叶子节点只存储键信息。

所有叶子节点之间都有一个链指针。

数据记录都存放在叶子节点中。

缺点:无

图:

330a33167a3378ae291c585cd0e89f9a.png

五、mysql采用B+Tree数据结构存储数据

5.1、B+TREE叶子节点指针作用:定位值比它大的叶子节点。

5.2、引申出为什么mysql "!="或者“<>” 不走索引。从下图可以知道原因,因为B树的左节点是比右节点小,而且节点有指针很快能找到范围的数据,B树特性+指针的配合这样可以快速找到指定范围数据。

图:

cd0e0f46c3fe73748cbf56e395cd96b5.png

六、mysql为什么用整型自增作为索引比较好。而UUID作为索引效率比较低?

索引存储在磁盘,而且树的每个节点分配的空间有大小。整型占空间比较小,这样可以存放多个键值。反之然后UUID占空间比较大。

整型比较方便,UUID比较需要先转成ASCII在进行比较

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值