标签:总结 数据库 TREE 索引 key MySQL 数据结构 节点
目录
索引
索引概念
MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
优势与劣势
优势
- 提高数据检索的效率,降低数据库的IO成本
- 通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗
劣势
- 索引也是一张表,该表中保存了主键与索引字段,并指向实体类的记录,所以索引列也是要占用空间的
- 虽然索引大大提高了查询效率,在insert、update、delete操作时,MySQL不仅要保存数据,还要保存索引文件每次改动列的字段,都会调整因为更新所带来的键值变化后的索引信息
索引结构
索引是在MySQL中的存储引擎层中实现的,不是服务器层。所以每种存储引擎的索引实现方式或有不同。目前提供了以下4中索引:
- B-TREE 索引:最常见
- HASH 索引:只有Memory引擎支持,使用场景简单
- R-tree 索引(空间索引):空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少
- Full-text(全文索引):全文索引也是MyISAM的一个特殊索引类型,主要用于全文索引
注:聚类索引、复合索引、前缀索引、唯一索引默认都是使用B+tree索引,统称为 索引。
B-TREE结构
B-TREE 又叫多路平衡搜索树,一颗 m 叉的 B-TREE 特性如下:
- 树中每一个节点最多包含 m 个子节点
- 除根节点与叶子节点外,每个节点至少有 [ceil(m/2)]个子节点
- 若根节点不是叶子节点,则至少有两个子节点
- 所有的叶子节点都在同一层
- 每个非叶子节点由 n 个 key 与 n+1 个指针组成,其中 [ceil(m/2)-1] <= n <= m-1
例:
C N G A H E K Q M F W L T Z D P R X Y S
B-TREE和二叉树相比,查询数据的效率更高,因为对于相同的数量来说,B-TREE的层级结构比二叉树小,因此搜索速度块。
B+TREE 结构
B+TREE 和 B-TREE 的区别:
- n 叉 B+TREE 最多包含由 n 个 key,而 B-TREE 最多含有 n-1 个 key
- B+TREE 的叶子节点保存所有的 key 信息,依 key 大小顺序排列
- 所有的非叶子节点都可以看作是key的索引部分
MySQL索引数据结构对经典的B+TREE进行了优化,在原B+TREE的基础上,增加一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的B+TREE,提高区间访问的性能。
MySQL中的B+TREE索引结构示意图:
索引分类
- 单值索引:即一个索引只包含单个列,一个表可以有多个单值索引
- 唯一索引:索引列的值必须是唯一的,但允许由空值
- 符合索引:即一个索引包含多个列
标签:总结,数据库,TREE,索引,key,MySQL,数据结构,节点 来源: https://blog.csdn.net/qq_43517336/article/details/114406791
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。