索引数据结构

1、 二叉搜索树(Binary Search Tree)

二叉搜索树是每个节点最多有两个子节点的树,按照右侧子节点大于本节点,左侧子节点小于本节点的规律排列,可以用作搜索,结构如下图所示

二叉树虽然可以用于查找,但在某种特定情况下查找效率并不高,类似于下图:

2、红黑树

对于二叉树的缺点,红黑树是一种拥有 自平衡 属性的二叉树,红黑树有五个特性:

每个结点是黑色或者红色。

根结点是黑色。

每个叶子结点(NIL)是黑色。 [ 注意 :这里叶子结点,是指为空(NIL或NULL)的叶子结点!不是有值的最后一个节点。]

不能有两个相连的红色节点。

每个结点到叶子结点NIL所经过的黑色结点的个数一样的。

根据以上五种属性,红黑树生成时采用左旋,右旋,左右旋,右坐旋等才做,会生成出一颗相对平衡的二叉树,如下图

3、Hash表

Hash表类似于java中的hashMap,把索引列做hash映射后以KV结构存储在内存中,是精准查找最快的索引结构,只需要一次hash便可以定位,但不支持范围查找。

就是个K-V结构,不画图了

4、B-Tree

由于数据库要存储大量的数据,如果采用二叉树进行查找,数据量过大时二叉树的层级过多,需要由上到下进行查找效率过慢,所以出现了B-Tree,BTree有如下特征

·叶节点具有相同的深度

·叶节点的指针为空

·所有索引元素不重复

·节点中的数据索引从左到右递增排列

数据结构直接上图

5、B+Tree

不过mysql真正采用的不是BTree,Btree在做索引的时候有些地方并不是很实用,最终优化出了B+tree作为mysql innoDB存储类型的索引,B+tree的特征如下

非叶子节点不存储data,只存储索引(冗余)

可以放更多的索引

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

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

结构如下图

PS: innoDB中的主键索引的B+tree是聚集索引,叶子结点直接存储的其他字段的值,用于减少IO的次数,而辅助索引的叶子结点则是存储的主键的值,用于辅助查找

mysql主要索引类型

1:MyISAM存储引擎索引实

MyISAM的索引和数据文件是分开的(非聚集索引),索引的叶子节点存储的是数据的物理地址,查找到相关索引后再用索引去硬盘上查找数据

2:InnoDB存储引擎索引实现

InnoDB的索引是和数据存储在一起的(聚集索引),叶子结点中存储了所有其他字段的值,只需要一次加载叶子结点的IO进行索引匹配,匹配成功后不需要再次进行IO操作读取对应的数据

--表数据文件本身就是按B+Tree组织的一个索引结构文件

--非主键索引结构叶子节点存储主键值的原因是为了一致性和节省存储空间

3: 联合索引的底层存储结构

联合索引是根据索引建立时字段的排列顺序建立的索引,后续索引是对第一个字段索引的再划分,差找时如果不能保证按照索引简历时的顺序进行查询,则联合索引失效

mysql+零时数据结构,MySql主要索引数据结构相关推荐

  1. mysql 查找多组数据结构_MySql主要索引数据结构

    索引数据结构 1. 二叉搜索树(Binary Search Tree)二叉搜索树是每个节点最多有两个子节点的树,按照右侧子节点大于本节点,左侧子节点小于本节点的规律排列,可以用作搜索,结构如下图所示 ...

  2. mysql 大量数据 更改索引_Mysql索引数据结构详解与索引优化

    本篇文章主要学习了MySQL的索引的数据结构的认识,做一个大概的了解即可. 一.索引 在关系数据库中,索引是一种单独的.物理的对数据库表中一列或多列的值进行排序的一种存储数据结构,它是某个表中一列或若 ...

  3. mysql索引数据结构图解_深入理解Mysql索引底层数据结构与算法

    索引的定义:索引(Index)是帮助MySQL高效获取数据的数据结构. Q1:大家使用索引有没有想过这个问题?为什么索引能够帮助mysql高效获取数据?我一一给大家道来!在给大家讲之前,先更大家分享一 ...

  4. Mysql索引数据结构有多个选择,为什么一定要是B+树呢?_面试 (MySQL 索引为啥要选择 B+ 树)

    Mysql索引数据结构 下面列举了常见的数据结构 二叉树 红黑树 Hash表 B-Tree(B树) Select * from t where t.col=5 我们在执行一条查询的Sql语句时候,在数 ...

  5. mysql索引数据结构图解_MySQL索引底层结构与实现原理

    为什么要使用索引 MySQL官方定义为:索引(Index)是帮助 MySQL 高效获取数据的数据结构,类似于书的目录结构一样. 如果向mysql发出一条sql语句请求,查询的字段没有创建索引的话,可能 ...

  6. mysql索引数据结构图解_干货:mysql索引的数据结构

    索引 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构. 我们知道,数据库查询是数据库的最主要功能之一.我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计 ...

  7. 【肝帝一周总结:全网最全最细】☀️Mysql 索引数据结构详解与索引优化☀️《❤️记得收藏❤️》

    [肝帝一周总结:全网最全最细]☀️Mysql 索引数据结构详解与索引优化☀️<❤️记得收藏❤️> 目录

  8. 一文说清MySQL索引数据结构

    前言 接上篇说到,小A匆匆忙忙的赶回宿舍,因为晚上他要给女神整理讲解MySQL中索引数据结构资料.一边整理一边忍住不笑了起来,等小美看到这篇文章不得爱上自己.当上小美男朋友,从此踏上人生巅峰不是梦(该 ...

  9. MySQL事务、MySQL索引、MySQL索引数据结构详解

    事务 DDL : 操作表,库 DCL : 授权 DML : 增删改数据 DQL : 查询 TCL : 数据库事务语言 #前期准备 CREATE TABLE account( #账户 id INT PR ...

最新文章

  1. VanDyke.SecureCRT.v7.0.0.326官方英文版x86 x64 + Keymaker-ZWT
  2. leetcode 54. 螺旋矩阵
  3. 【C语言简单说】七:自定义函数(3)
  4. Arm Linux交叉编译和连接过程分析(2)
  5. axios+vue+springboot完成批量删除
  6. 在Spark上运行WordCount程序
  7. java异常处理拦截器
  8. 已解决:Multisim仿真出现错误:“发生了仿真错误”“收敛助手”“Transient time point calculation did not converge”
  9. 关于U盘还原安装Mac系统
  10. php编程怎样装数据库,php数据库管理工具phpmyadmin下载、安装、配置
  11. 运维审计系统是堡垒机么?跟堡垒机有啥区别?
  12. 华视cvr-100UC 二代身份证读卡通用函数
  13. 高级计划和排程(APS)软件的功能与用途
  14. 网络收敛是什么意思_收敛是什么意思(什么是收敛性)
  15. 最新emoji表情代码大全_周六最美早晨好问候语图片大全 早晨好图片祝福 最新早上好问候动态表情图片...
  16. $route和$router的区别
  17. 基于多目标算法的冷热电联供型综合能源系统运行优化 多目标粒子群 冷热电联供 综合能源系统 运行优化
  18. ue64ctmn.dll无法删除问题
  19. 场景文本检测论文阅读时间线
  20. java8常见的List转Map的方法

热门文章

  1. 五万字 Linux 知识点深度解析,学完每个人都是高手
  2. 【机器学习算法-python实现】决策树-Decision tree(2) 决策树的实现
  3. 机器学习算法与Python实践之(六)二分k均值聚类
  4. python if main_python中if __name__ == '__main__' :main(()
  5. Python入门100题 | 第028题
  6. 用python读取、处理、另存为csv文件
  7. How those spring enable annotations work--转
  8. Coroutine in Java - Quasar Fiber实现--转载
  9. 社交产品后端架构设计--转载
  10. Java 编程的动态性,第 8 部分: 用代码生成取代反射--转载