iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql详解之B+树的查询时间复杂度
  • 329
分享到

mysql详解之B+树的查询时间复杂度

mysql数据库b+树 2023-09-04 08:09:44 329人浏览 薄情痞子
摘要

前言 B+ 树搜索时间复杂度到底是什么(这篇文章分析了全网各种关于b+树时间复杂度相关博客的结论,总结并分析了他们结论差异的原因)。 本文在此基础上,对文中的结论做了进一步思考(如果对解题过程不感兴趣

前言

B+ 树搜索时间复杂度到底是什么(这篇文章分析了全网各种关于b+树时间复杂度相关博客的结论,总结并分析了他们结论差异的原因)。
本文在此基础上,对文中的结论做了进一步思考(如果对解题过程不感兴趣,可以直接看最后的总结)。

正题

在这篇文章中,得知B+树在内存里的时间复杂度是:

O( log ⁡ 2 m ⋅ log ⁡ m n ) O(\log_2^m \cdot \log_m^n) O(log2mlogmn)

然后我就想比较一下B+树和二叉树的时间复杂度。我们知道二叉树的时间复杂度是O(logn)【计算机行业的简写:把底数2给省略了】,完整的数学公式是:

O( log ⁡ 2 n ) O(\log_2^n) O(log2n)

注意:本文所有二叉树都指的平衡二叉树,并且和B+树一样把数据存在叶子节点上。(事实上,二叉树都时间复杂度,就是在这样的前提条件下计算出来的)。
其实文本的目的就是:观察B+树分支(度)的变化,对时间复杂度的影响(当分支为2时,就是二叉树)

怎么比较呢?前者有两个变量,后者只有一个变量。我们可以给m固定几个数,然后观察几条函数曲线。

使用一个在线函数绘制工具

在这里插入图片描述

第一个是二叉树的时间复杂度函数。后三个分别是b+树的时间复杂度函数,m分别为3,4,5。

发现一个惊人的结果:他们看起来好像都完全重合了

莫非 log ⁡ 2m ⋅ log ⁡ mn = log ⁡ 2n \log_2^m \cdot \log_m^n = \log_2^n log2mlogmn=log2n

在网上搜了一下相关的对数公式,没什么解题思路。

难道他们只是约等于? 只是误差很小,看不出来?不过也有可能是自己高中数学知识还给老师了,不会解而已(因为我把这个函数曲线无论怎么放大,或者往后看,都是一样的,应该不至于误差那么小)。

但当我用m去假设,带入m=2。m=4。 m=8尝试化简,结合一个对数公式,居然找到解题思路了。


解:

根据公式

m n ⋅ log ⁡ a b = log ⁡ a n b m \frac{m}{n} \cdot \log_a^b = \log_{a^n}^{b^m} nmlogab=loganbm

m= 2 x m = 2^x m=2x

变换( n = n1 n = n^1 n=n1)之后,根据前面的那个公式,可得到

log ⁡ 2 m ⋅ log ⁡ m n = log ⁡ 2 2 x ⋅ log ⁡ 2 x n 1 =x⋅( 1 x ⋅ log ⁡ 2 n )= log ⁡ 2 n \log_2^m \cdot \log_m^n = \log_2^{2^x} \cdot \log_{2^x}^{n^1} = x \cdot ( \frac{1}{x} \cdot \log_2^n) = \log_2^n log2mlogmn=log22xlog2xn1=x(x1log2n)=log2n


稍微解释一下:m 为什么可以等于 2 x 2^x 2x
m在这里就是大于2的自然数,这句话其实就是问 2x 2^x 2x能不能表示任意一个大于2的自然数。当然是可以的,因为 2x 2^x 2x是一条大于0的连续曲线。

所以:在内存里,当元素一样,b+树在一个节点内也采用二分法查找元素(最快的方式)。b树和二叉树的时间复杂度都是O(logN)

总结

在内存里(不考虑磁盘io的特殊性),n叉树的查询时间复杂度都是O(logN)。

其他

关于开头那篇博客的最后一句:

log ⁡ m N 可以简写为logN \log_m^N 可以简写为 logN logmN可以简写为logN

我是不太认同的。

按照作者的意思,底数m的变化对结果影响不大,可以省略。

下面这几条曲线从上到下,依次对应左边从上到下的四个函数(m=2,m=3,m=100,m=1000)

在这里插入图片描述

看函数曲线,对数函数确实变化非常缓,底数对结果影响也没那么明显。

当n=1000000(一百万)时

二叉树需要遍历20次,而“1000叉树”只需要2次。如果在内存里,差别确实不大,都会非常快。

但作者那句话的前提是:考虑磁盘IO。也就是说这是在讨论类似数据库的场景。

在100万正常数据量的情况下,二叉树需要磁盘io达到20次,这肯定是不可接受的。

而m=1000就是Mysql一般的分叉数量级(度数),这也就我们说的:mysql的B+索引树一般就是3层

来源地址:https://blog.csdn.net/yunduanyou/article/details/128233801

您可能感兴趣的文档:

--结束END--

本文标题: mysql详解之B+树的查询时间复杂度

本文链接: https://www.lsjlt.com/news/393213.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql详解之B+树的查询时间复杂度
    前言 B+ 树搜索时间复杂度到底是什么(这篇文章分析了全网各种关于b+树时间复杂度相关博客的结论,总结并分析了他们结论差异的原因)。 本文在此基础上,对文中的结论做了进一步思考(如果对解题过程不感兴趣...
    99+
    2023-09-04
    mysql 数据库 b+树
  • Java 数据结构之时间复杂度与空间复杂度详解
    目录算法效率时间复杂度什么是时间复杂度推导大 O 阶的方法算法情况计算冒泡排序的时间复杂度计算二分查找的时间复杂度计算阶乘递归的时间复杂度计算斐波那契递归的时间复杂度空间复杂度计算冒...
    99+
    2024-04-02
  • Java时间复杂度、空间复杂度的深入详解
    目录算法效率时间复杂度什么是时间复杂度推导大 O 阶的方法算法情况计算冒泡排序的时间复杂度计算二分查找的时间复杂度计算阶乘递归的时间复杂度计算斐波那契递归的时间复杂度空间复杂度计算冒...
    99+
    2024-04-02
  • 分析C++中红黑树的时间复杂度和空间复杂度
    红黑树是一种自平衡的二叉搜索树,它具有以下特点: 每个节点要么是红色,要么是黑色。 根节点是黑色。 每个叶子节点(NIL节点)是黑...
    99+
    2024-04-26
    C++
  • C语言详细解析时间复杂度与空间复杂度
    目录一、概念1.1、算法效率1.2、时间复杂度1.3、空间复杂度二、计算2.1、大O的渐进表示法2.2、时间复杂度计算2.3、空间复杂度计算三、有复杂度要求的习题一、概念 1.1、算...
    99+
    2024-04-02
  • MySQL之复杂查询的实现
    目录1.排序2.分组3.联合查询4.多表连接1.排序 ORDER BY 子句来设定哪个字段哪种方式来进行排序,再返回搜索结果。desc:降序 select * from b...
    99+
    2024-04-02
  • C语言 超详细讲解算法的时间复杂度和空间复杂度
    目录1.前言1.1 什么是数据结构?1.2 什么是算法?2.算法效率2.1 如何衡量一个算法的好坏2.2 算法的复杂度2.3 复杂度在校招中的考察3.时间复杂度3.1 时间复杂度的概...
    99+
    2024-04-02
  • Java算法之时间复杂度和空间复杂度的概念和计算
    目录一、算法效率二、时间复杂度2.1 时间复杂度的概念2.2 大O的渐进表示法2.3 时间复杂度的三种情况2.4 常见时间复杂度计算举例2.4.1 例子2.4.2 冒泡排序时间复杂度...
    99+
    2024-04-02
  • C语言关于时间复杂度详解
    目录一、时间复杂度1.什么是时间复杂度?2.如何计算?3.常见的时间复杂度: 二、空间复杂度1.什么是空间复杂度?2.如何计算?总结一、时间复杂度 1.什么是时间复杂度? ...
    99+
    2024-04-02
  • hashmap查询时间复杂度为O(1)的原因是什么
    本篇内容介绍了“hashmap查询时间复杂度为O(1)的原因是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!hashmap为什么查询时间...
    99+
    2023-06-20
  • 浅谈hashmap为什么查询时间复杂度为O(1)
    hashmap为什么查询时间复杂度为O(1) Hashmap是java里面一种类字典式数据结构类,能达到O(1)级别的查询复杂度,那么到底是什么保证了这一特性呢,这个就要从hashm...
    99+
    2024-04-02
  • MySQL查询语句之复杂查询的示例分析
    这篇文章主要介绍MySQL查询语句之复杂查询的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有...
    99+
    2024-04-02
  • 归并排序时间复杂度过程推导详解
    目录归并排序总结归并排序 归并排序方法就是把一组n个数的序列,折半分为两个序列,然后再将这两个序列再分,一直分下去,直到分为n个长度为1的序列。然后两两按大小归并。如此反复,直到最后...
    99+
    2024-04-02
  • Java详细讲解堆排序与时间复杂度的概念
    目录一、堆排序1、什么是堆排序2、堆排序思想3、代码实现二、时间复杂度分析1、初始化建堆2、排序重建堆3、总结一、堆排序 1、什么是堆排序 (1)堆排序:堆排序(Heapsort)是...
    99+
    2024-04-02
  • Mysql数据库时间查询举例详解
    目录1、查询当前时间  年月日时分秒2、查询当前时间 前三小时 的时间点3、查询当前时间  前三天 的时间点4、查新当前时间 前三分钟&nb...
    99+
    2023-05-19
    mysql查询时间语句 sql 查询时间 MySQL 获取当前日期
  • C++ 函数优化详解:如何优化时间复杂度?
    为了优化 c++++ 函数的时间复杂度,可以通过以下方法:①避免不必要的复制操作;②减少函数调用;③使用高效的数据结构。举例来说,采用备忘录技术可以将斐波那契数列计算的复杂度从 o(2^...
    99+
    2024-05-03
    c++ 函数优化
  • C语言数据结构之算法的时间复杂度
    目录1、算法的复杂度2、时间复杂度2.1 时间复杂度的定义2.2 大O的渐进表示法3、常见时间复杂度计算举例3.1 冒泡排序的时间复杂度3.2 二分查找的时间复杂度3.3 阶乘(递归...
    99+
    2024-04-02
  • 算法与数据结构之如何理解时间与空间复杂度
    本篇内容介绍了“算法与数据结构之如何理解时间与空间复杂度”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!写在...
    99+
    2024-04-02
  • C++ 超详细分析数据结构中的时间复杂度
    目录什么是时间复杂度和空间复杂度如何计算时间复杂度和空间复杂度如何计算时间复杂度和空间复杂度别别着急划走哈,如果你跟我一样是大学生,那么你发现了一个宝藏!我们往后看--> 什么...
    99+
    2024-04-02
  • MySql学习day03:数据表之间的连接、查询详解
    主键: 关键字:primary key 特点:不能为null,并且唯一。 主键分类: 逻辑主键:例如ID,不代表实际的业务意义,只是用来唯一标识一条记录(推荐) 业务主键:例如username,参...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作