B+树特点

考虑因素

支持按照区间来查找数据
磁盘 IO 操作
N叉树

树的高度就等于每次查询数据时磁盘 IO 操作的次数
在选择 m 大小的时候,要尽量让每个节点的大小等于一个页的大小。读取一个节点,只需要一次磁盘 IO 操作。(分裂成两个节点)

问题

跳表和B+树在实现难度和性能上有什么区别,在数据量很大的情况下,表现性能如何,为什么redis选跳表?
b+树主要是用在外部存储上,为了减少磁盘IO次数。
跳表比较适合内存存储。
实际上,两者本质的设计思想是雷同的,性能差距还是要具体看应用场景,无法从时间复杂度这么宽泛的度量标准来度量了。

B+ 树中,将叶子节点串起来的链表,是单链表还是双向链表?为什么?

对于B+tree叶子节点,是用双向链表还是用单链表,得从具体的场景思考。我想,大部分同学在开发中遇到的数据库查询,都遇到过升序或降序问题,即类似这样的sql: select name,age, … from where uid > startValue and uid < endValue order by uid asc(或者desc),此时,数据底层实现有两种做法:
1)保证查出来的数据就是用户想要的顺序
2)不保证查出来的数据的有序性,查出来之后再排序
以上两种方案,不加思考,肯定选第一种,因为第二种做法浪费了时间(如果选用内存排序,还是考虑数据的量级)。那如何能保证查询出来的数据就是有序的呢?单链表肯定做不到,只能从头往后遍历,再想想,只能选择双向链表了。此时,可能有的同学又问了:双向链表,多出来了一倍的指针,不是会多占用空间嘛? 答案是肯定的。可是,我们再细想下,数据库索引本身都已经在磁盘中了,对于磁盘来说,这点空间已经微不足道了,用这点空间换来时间肯定划算呀。顺便提一下:在实际工程应用中,双向链表应用的场景非常广泛,毕竟能大量减少链表的遍历时间

如果我们把散列表中的结点,也用链表串起来,能否支持按照区间查找数据呢?

答案是「肯定的」。JDK中的LinkedHashMap为了能做到保持节点的顺序(插入顺序或者访问顺序),就是用双向链表将节点串起来的。

笔记整理来源: 王争 数据结构与算法之美

【数据结构与算法】【算法思想】【MySQL数据库索引】B+树相关推荐

  1. mysql 数据库索引b+树深度问题

    常见面试题:mysql数据库一颗b+树深度大概是多少? 这要从b+树的结构和数据库索引大小去分析问题,索引字段占内存大小,指针占内存大小(6字节 6Byte,或者6B) 1.先看看b+树结构 下面看一 ...

  2. mysql索引 b树_B树与MySQL数据库索引.ppt

    B树与MySQL数据库索引 * B+树及MySQL数据库索引 厦门大学数据库实验室 罗道文 2014-08-02 ?B树以及B+树的特点以及原理 ?MySQL存储引擎MyISAM和InnoDB的B+树 ...

  3. Mysql数据库索引原理及算法原理

    前言 面试的时候总会被提及一些关于数据库操作的问题,那么数据库索引作为一项热门问题,总会被问到.最近在网上看到了一篇关于mysql数据库索引的好文章,认真看完之后肯定受益匪浅,(虽说有的地方我不太理解 ...

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

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

  5. 深度解密Mysql数据库索引

    文章目录 深度理解Mysql数据库索引 Mysql索引的基本概念 索引分类 Mysql中索引的语法 创建索引 删除索引 查看表中的索引 查看查询语句使用索引的情况 索引的优缺点 优点 缺点 索引的实现 ...

  6. [数据库] 一文读懂Mysql数据库索引实现原理

    咱们用了这么久Mysql数据库做项目,你知道数据是怎么存在数据库里吗?他们是如何存储的吗? 今天咱们就来扒一扒Mysql数据库索引的底层实现,Mysql数据库的索引是由都是由B+树实现的,那为什么不是 ...

  7. MYSQL数据库-索引

    MYSQL数据库-索引 零.前言 一.索引概念 二.认识磁盘 三.理解索引 1.如何理解Page 2.B+ vs B 3.聚簇索引 VS 非聚簇索引 4.普通索引 5.总结 四.索引操作 1.创建索引 ...

  8. mysql数据库-索引基础篇

    1.索引介绍 1.索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),他们包含着对数据表里所有记录的引用指针.是一种数据结构是一种数据库系统中排序的数据结构,以协助快速查询,更新 ...

  9. 知识点:Mysql 数据库索引优化实战(4)

    知识点:Mysql 索引原理完全手册(1) 知识点:Mysql 索引原理完全手册(2) 知识点:Mysql 索引优化实战(3) 知识点:Mysql 数据库索引优化实战(4) 一:插入订单 业务逻辑:插 ...

  10. java如何实现e的次方_Java开发如何更改MySQL数据库datadir目录之MySQL数据库索引实现...

    引言 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 ...

最新文章

  1. 智在生活 自在慵懒 科沃斯机器人X京东大牌秒杀日主题展亮相无锡
  2. Linux用init命令关机、重启、切换模式
  3. IIS与COM组件权限的问题
  4. 20180316 数组查询时间复杂度
  5. 2018 青岛网络赛C题Halting Problem
  6. python举两种字符串引号的例子_python里的单引号和双引号的有什么作用
  7. 地址栏 输入 参数 刷新参数丢失_小米11 Pro屏幕参数曝光:2K屏幕+120Hz刷新率
  8. note.js和mysql的优劣_nginx与Node.js的优缺点是什么?
  9. java redis set list_RedisTemplate的各种操作(set、hash、list、string)_lichuangcsdn的博客-CSDN博客...
  10. 干货 | ZooKeeper 源码和实践揭秘
  11. visio中虚线粘贴到word中变实线的解决办法(转)
  12. Oracle Logminer 说明
  13. 百度语音合成data:audio/x-mpeg;base64转mp3
  14. C语言井字棋人人对战源代码,回忆儿时游戏-井字棋(完整代码)
  15. UML建模工具最近更新汇总(-2022年7月)共16款:Visual State、UML Diagrammer……
  16. windows平台下获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号
  17. SRE工作手册——基础
  18. 基于spss的非线性回归(non-linear regression)
  19. linux登陆提示密码过期,linux用户密码过期
  20. NS2中GOD的使用

热门文章

  1. SurvivalShooter学习笔记(八.敌人管理器)
  2. 移动端开发的知识系统介绍
  3. Error applying BeanValidation relational constraints错误的解决
  4. 请问这博客能有几种方便写法?
  5. 如何将函数的实际参数转换成数组
  6. PMP读书笔记(第2章)
  7. 运行银联支付系统demo
  8. @ConfigurationProperties + @EnableConfigurationProperties
  9. Unable to add window token null is not valid is your activity running
  10. android开发入门