一.数据结构

1. 二叉树

特点:左侧子节点比父节点小,右侧子节点比父节点大(对于同一个父节点下的两个子节点)

缺点:对于一直递增得数据不能存在该数据结构中,会变成链表,不能降低树的高度

图 1-1

图1-2

2. 红黑树

特点:左侧子节点比父节点小,右侧子节点比父节点大、或者相等(对于同一个父节点下的两个子节点),对于一直递增的数据可以自动平衡

缺点:对于百万条数据,树的高度还是太高

3. Hash表

优点:对数据进行Hash(散列)运算,主流的Hash算法有MD5、SHA256等等,然后将哈希结果作为文件指针可以从索引文件中获得数据的文件指针,再到数据文件中获取到数据,按照这样的设计,我们在查找where Col2 = 22的记录时只需要对22做哈希运算得到该索引所对应那行数据的文件指针,从而在MySQL的数据文件中定位到目标记录,查询效率非常高。

缺点:无法解决范围查询(Range)的场景,比如 select count(id) from sus_user where id>10;因此Hash这种索引结构只能针对字段名=目标值的场景使用。不适合模糊查询(like)的场景

4. B-树

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

缺点:存储的数据量没有B+树多,B树不支持range-query

(区间查询)

图1-3

5. B+树

特点:非叶子节点不存储data,只存储索引(冗余),可以放更多的索引,叶子节点包含所有索引字段,叶子节点用指针链接,提高区间访问的性能。

与B-树对比B+树有一个最大的好处,方便扫库,B树必须用中序遍历的方法按序扫库,而B+树直接从叶子结点挨个扫一遍就完了,B+树支持range-query(区间查询)非常方便,而B树不支持。

图 1-4

mysql数据结构_mysql的底层数据结构相关推荐

  1. mysql的底层数据结构_MySQL索引底层数据结构实现原理

    MySQL索引背后的数据结构及算法原理 一.定义 索引定义:索引(Index)是帮助MySQL高效获取数据的数据结构. 本质:索引是数据结构. 二.B-Tree m阶B-Tree满足以下条件: 1.每 ...

  2. 面试必问:一文弄懂MySQL数据库索引之底层数据结构和索引类型

    面试必问:一文弄懂MySQL数据库索引之底层数据结构和索引类型 前言 一.索引 1.1作用 1.2特点 1.3使用 1.3.1创建索引 1.3.2删除索引 1.3.3查看表中的索引 1.3.4查看SQ ...

  3. mysql索引底层图_MySQL索引底层数据结构

    一.何为索引? 1.索引是帮助数据库高效获取数据的排好序的数据结构. 2.索引存储在文件中. 3.索引建多了会影响增删改效率.(一张表最多允许建16个索引) (下面这张图为计算机组成原理内容,每查询一 ...

  4. 【MySQL】Mysql索引优化与底层数据结构深入剖析 - 笔记

    索引 使用索引,会提前存储被索引字段对应行的磁盘文件地址指针,做一次IO就能查找到数据. 二叉树 递增的索引不适合用二叉树来维护,因为递增的id会导致二叉树退化成为链表,这样建立索引的效果和不建立索引 ...

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

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

  6. Redis常用数据类型及其对应的底层数据结构

    Redis数据库 Redis是一种键值(Key-Value)数据库.相较于MySQL之类的关系型数据库,Redis是一种非关系型数据库.Redis存储的数据只包含键和值两部分,只能通过键来查询值.这样 ...

  7. STL容器底层数据结构

    STL容器底层数据结构 1.vector 底层数据结构为数组 ,支持快速随机访问 2.list 底层数据结构为双向链表,支持快速增删 3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见S ...

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

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

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

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

最新文章

  1. 深度学习不是万灵药!神经网络3D重建只是图像分类
  2. 一周一论文(翻译)——[SIGMOD 2015] Congestion Control for Large-Scale RDMA
  3. 自考计算机软件基础交作业,全国2009年7月自考计算机软件基础(二)试题及答案...
  4. linux 查redis状态_干货:用案例代码详解Redis中的事件驱动模型
  5. H.264视频RTP负载格式/NALU的类型
  6. 处理器排行_垃圾处理器排行榜 适邦垃圾处理器榜上有名
  7. html标签之img,input标签
  8. npm -S -D -g i 有什么区别
  9. 技术大佬:我去,你写的 switch 语句也太老土了吧!
  10. 定时监控服务,告警,并启动服务
  11. hibernate 镜像下载_虚拟光驱软件下载手机版-虚拟光驱免费中文版64位下载v5.8.0...
  12. 教程资源合集(网上搜集整理)
  13. 多目标追踪综述阅读(2021)
  14. 目标检测---搬砖一个ALPR自动车牌识别的环境
  15. 抓网页_面包网_javaSE
  16. MDK keil中在定义一个结构体的时候加点后面不出现结构体当中变量的提示
  17. Android 实现自动点击屏幕的方法
  18. 容器化技术最佳实践1--容器化技术简介与Docker入门
  19. Keil仿真基于虚拟串口VSPD的串口调试(Virtual Serial Port Driver)
  20. C#汽车租凭(面对对象(封装、继承,多态的应用))

热门文章

  1. 操作系统--用户级线程与内核级线程
  2. leetcode hot100(第一部分) + python(c++)
  3. Android高性能ORM数据库DBFlow入门
  4. Android之ActionBar
  5. python之socket编程
  6. 前端React结构工程-改写render
  7. php伪静态不支持中文,wordpress伪静态如何支持中文(目前不支持分类目录中文)...
  8. 消息队列(1):一个消息队列应该有的特点
  9. mysql 不需要@的变量_mysql参数变量
  10. python 硬件模拟_如何编写一个硬件模拟器?