ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL索引已经数据结构相关

2022-06-26 21:32:33  阅读:127  来源: 互联网

标签:15 Tree 索引 MySQL 匹配 数据结构 数据 节点


为什么要使用索引

如果不使用索引的话,检索数据得逐行进行匹配,匹配成功才进行返回,而使用索引的话,可以将每行的地址进行保存,并将它们以某种数据结构的方式进行保存,可以极大的优化了检索数据,比如有800条数据,如下表所示。
image

如果想要对用户名为h的数据进行查询,不使用索引的情况下逐行匹配需要检索8次才能查询到数据。
而使用索引情况下,可以将索引与数据地址进行绑定,并以某种数据结构进行保存,以AVL平衡二分查找树举例。
索引地址对应着右边存储的数据所在的硬盘地址
image
建立一个AVL
image
查找索引为8的元素只需要2次就可以查到,但是二叉树有个缺点就是,随着存入的数据越来越多,树的高度则是越来越大,会使得检索效率下降,解决树的高度的问题可以采用B-Tree的方式进行数据保存,一个节点多存储几个数据即可
比如下面这种格式
image

这个关键字为4,表示子树必须为4个
在这条子树中,最左边那条的取值范围为-∞, 15,再后面那条的取值范围为15, 17, 之后那条是17, 最后那条取值范围为19, +∞。
image

但是B Tree有个缺点就范围查询时会回旋,比如要查大于15的元素时,会找到15然后到16,然后再返回15继续查找,这样会使得吞吐量下降,B+Tree可以解决这个问题。

B+Tree

image
非叶子节点不存储数据,数据全在叶子节点中存储,叶子节点中的数据是有序的,从左到右,依次递增。叶子节点类似链表,通过指针来连接下一个节点,叶子节点中保存所有索引数据。
比如要查找索引为三十的元素,首先会将15 56 77 这三个值装载进内存进行匹配,匹配所得30在15-56直接,走左子树,之后将15 20 49三个元素装载进内存进行匹配,匹配得20 49直接进中间那条,然后在中间那条所指的叶子节点进行加载内存并进行匹配返回。

标签:15,Tree,索引,MySQL,匹配,数据结构,数据,节点
来源: https://www.cnblogs.com/lyraHeartstrings/p/16414404.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有