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

这篇具有很好参考价值的文章主要介绍了mysql详解之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+树的时间复杂度,数据库,数据结构,mysql,数据库,b+树

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

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

莫非 log ⁡ 2 m ⋅ log ⁡ m n = log ⁡ 2 n \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 = n 1 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的自然数,这句话其实就是问 2 x 2^x 2x能不能表示任意一个大于2的自然数。当然是可以的,因为 2 x 2^x 2x是一条大于0的连续曲线。

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

总结

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

其他

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

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

我是不太认同的。

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

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

b+树的时间复杂度,数据库,数据结构,mysql,数据库,b+树

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

当n=1000000(一百万)时

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

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

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

而m=1000就是mysql一般的分叉数量级(度数),这也就我们说的:mysql的B+索引树一般就是3层文章来源地址https://www.toymoban.com/news/detail-607698.html

到了这里,关于mysql详解之B+树的查询时间复杂度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 时间复杂度详解

    目录 一、算法效率 1.什么是算法效率 2.算法效率有什么用 3.算法的复杂度 二、时间复杂度 1.什么是时间复杂度? 2.什么计算时间复杂度? 3.大O的渐进表示法 4.时间复杂度计算实例 三、空间复杂度 1.什么是空间复杂度 2.空间复杂度计算实例 算法效率是指算法执行的时间,算

    2024年02月16日
    浏览(26)
  • 算法的时间复杂度详解

    目录 前言 时间复杂度的概念  例题一: 大O渐近表示法 常见时间复杂度例题(含分析) 例一: 例三: 例四: 例五: 例六: 例七: 例八: 避免在处理大规模问题时出现效率低下,耗费较多资源,所以引入了算法复杂度,算法复杂度可以来衡量算法的效率和算法的可行性,

    2024年02月16日
    浏览(26)
  • C++时间复杂度详解

    一般时间复杂度的表现形式是 大O表示法 ,即 O( ) 。 大O表示法有以下4条法则: 1.括号中所有 常数加数省略 ,如只有一个常数, 记为1 。如O(372+n)→O(n)、O(89)→O(1)。 2.括号中 去掉所有常数乘数 如O(2n)→O(n)、O(3n+n+45*2)→O(4n+90)→O(4n)→O(n)。 3.括号中的数是整个代码每个 操作次

    2024年02月14日
    浏览(27)
  • 希尔排序及其时间复杂度(图文详解)

    😾 博客主页: 爱吃bug的猿 🚀 博客专栏: 数据结构,C语言初阶进阶全流程讲解 😽😽😽 如果喜欢博主的文章,可以给博主点波赞和关注加速博主更新 希尔排序里的一部分和插入排序极其相似,了解插入排序及其复杂度(动图讲解)可点击此处 希尔排序分为两部分:预排序

    2024年02月13日
    浏览(36)
  • 快速排序算法详解(原理,时间复杂度,实现代码)

    快速排序算法详解(原理、实现和时间复杂度) 快速排序是对冒泡排序的一种改进,由 C.A.R.Hoare(Charles Antony Richard Hoare,东尼·霍尔)在 1962 年提出。 快速排序的基本思想是 :通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比另一部分的所有数据

    2024年02月13日
    浏览(49)
  • 详解时间复杂度计算公式(附例题细致讲解过程)

    这几天开始刷力扣上面的 算法题 ,有些题目上面限制 时间复杂度 和 空间复杂度 ,题目虽然写出来了,但是很没底。印象里数据结构老师讲过一点,沉睡的记忆苏醒了。只记得一个时间复杂度是 O(n) ,空间复杂度是 S(n) 。for循环常常是O(n),具体是怎么算的不清楚。所以在看

    2024年02月03日
    浏览(36)
  • 数据结构与算法(Java版) | 详解算法的时间复杂度

    下面我们用一个问题来引出算法的时间复杂度这一概念。 该问题是,怎么去衡量一个程序(或者算法)的执行时间呢?就拿我们刚刚讲的排序算法来说,排序算法这么多,你又如何知晓哪一个排序算法执行的时间谁长谁短呢? 要想搞清楚该问题,那我们就不得不知道度量一

    2024年02月05日
    浏览(45)
  • 时间复杂度和空间复杂度

    时间复杂度和空间复杂度是用来评估算法性能的两个重要指标。 时间复杂度(Time Complexity)是衡量算法执行时间随输入规模增长而增长的度量。它表示了算法解决问题所需的时间量级。常见的时间复杂度有: 常数时间复杂度 O(1):无论输入规模的大小,算法的执行时间都是固

    2024年01月17日
    浏览(47)
  • 数据结构 — 时间复杂度、空间复杂度

    数据结构_空间复杂度_时间复杂度讲解_常见复杂度对比 本文介绍数据结构中的时间复杂度和空间复杂度 ***文章末尾,博主进行了概要总结,可以直接看总结部分*** 博主博客链接:https://blog.csdn.net/m0_74014525 点点关注,后期持续更新系列文章 算法效率指的是算法在处理数据时

    2024年02月13日
    浏览(49)
  • 算法的时间复杂度与空间复杂度

    1.算法效率 2.时间复杂度 3.空间复杂度 4.复杂度oj题目 1.算法效率 1.1 如何衡量一个算法的好坏 一辆车的好坏我们可以从价格,油耗...... 方面来衡量,但衡量一个算法的好坏我们该从哪一个方面入手呢?比如斐波那契数列: 斐波那契数列的递归实现方式非常简洁,但简洁一定

    2024年02月15日
    浏览(83)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包