MySQL B+树以及深度计算

news2024/11/23 21:37:25

文章目录

      • 一、MySQL的索引结构
        • 1.1 MySQL索引结构与B+树
        • 1.2 B+树增删数据图解
      • 二、MySQL数据页
        • 2.1 索引高度h与页面I/O数的关系
        • 2.2 索引高度理论计算
      • 三、查看MySQL树高

一、MySQL的索引结构

1.1 MySQL索引结构与B+树

  MySQL使用B+树存储索引数据,B+树的非叶节点不保存数据相关信息, 只保存关键字和子节点的引用;关键字对应的数据保存在叶子节点中;B+树的叶子节点是顺序排列的,且相邻接点具有顺序引用关系,因此B+树在范围查找时能力更强,同时排序能力更强。因为仅仅在叶子节点存储数据,这样索引文件更小,磁盘读写能力更强。B+树的树高较低,索引文件较小,IO次数稳定,查询效率更加稳定。在这里插入图片描述
**数据就存在主键索引的叶子节点中,其他索引存主键,再从主键索引中找数据;InnoDB是通过B+树结构对主键创建索引,然后叶子节点中储存记录,如果没有主键,那么会选择唯一键,如果没有唯一键,那么会生成一个6位的row_id来作为主键。如果创建索引的键是其他字段,那么在叶子节点中存储的是该记录的主键,然后再通过主键索引找到对应的记录。 **
在这里插入图片描述

1.2 B+树增删数据图解

在这里插入图片描述

二、MySQL数据页

  MySQL的InnoDB是以页为存储单位的,每个B+Tree的节点都是一个页的大小,默认一页的大小是16K。
在这里插入图片描述
在这里插入图片描述

2.1 索引高度h与页面I/O数的关系

  MySQL每次查询都要访问到叶子结点,其访问的页面数正好就是索引的高度h。例如,一次主键上的点查询select * from table_name where id=1;,那么要查询h1个页面才能找到叶子结点里的行数据,也即进行h1次页面I/O。查询对应的页面I/O数跟利用的索引有关,主要分为以下几种情况:

  • 点查询:

    • 聚族索引:h1
    • 二级索引:
      • 覆盖索引:h2
      • 回表查询:h2+h1
  • 全表查询:B+树的叶子结点是通过链表连接起来的,对于全表查询,需要从头到尾将所有的叶子结点访问一遍。

2.2 索引高度理论计算

  索引页(非叶子节点)中可以分割为多个扇区,每个扇区再指向某子节点(某页);
假设非叶子节点扇区数为k个、高度h、叶子结点的行记录数为n,则叶子结点数为k(h-1),总记录数为k(h-1)*n。
假设主键ID为bigint类型,长度为8字节,而指针大小在InnoDB源码中设置为6字节,这样一共14字节。 那么一个页中能存放多少这样的组合,就代表有多少指针,即 16384 / 14 = 1170。那么可以算出一棵高度为2 的B+树,能存放 1170 * 16 = 18720 条这样的数据记录。在高度h=3时,叶子结点数=1170^2 ≈137W,总记录数=1170^2*16=2190W;也就是说,InnoDB通过三次索引页面的I/O,即可索引2190W行记录;同理,在高度h=4时,总行数=1170^3*16≈256亿条

三、查看MySQL树高

  页的Page Header包含一个PAGE_LEVEL的信息,用于表示当前页所在索引中的高度。默认叶子节点的高度为0,那么Root页(根节点)的PAGE_LEVEL+1就是这棵索引的高度。每张表的根页位置在表空间文件中是固定的,即page number=3的页,找到根页后通过二分查找法,定位到数据在指针指向的页中,然后再去数据页中查找,同样通过二分查询法即可找到记录。
在这里插入图片描述
在这里插入图片描述

SELECT b.name, a.name, index_id, type, a.space, a.PAGE_NO
FROM information_schema.INNODB_SYS_INDEXES a,
     information_schema.INNODB_SYS_TABLES b
WHERE a.table_id = b.table_id 
      AND a.space <> 0;

  PAGE_NO代表ibd文件中的页面号(从0开始)。PAGE_LEVEL在每个Root页的偏移量64位置处,占用两个字节,这样我们通过hexdump就可以快速定位到各索引树的高度信息。主键索引B+树的根页在整个表空间文件中的第3个页开始,所以算出它在文件中的偏移量;16384*3+64=49216 :即从第3个页内偏移量64位置开始读取10个字节,前两个字节为PAGE_LEVEL,后8个字节是index_id。

#00 01,所以树高为1+1=2
hexdump -C -s 49216 -n 10 table.ibd
0000c040  00 01 00 00 00 00 00 00  03 2b

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/346789.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

卫星、无人机平台的多光谱数据在地质、土壤调查和农业等需要用什么?

近年来&#xff0c;Python编程语言受到越来越多科研人员的喜爱&#xff0c;在多个编程语言排行榜中持续夺冠。同时&#xff0c;伴随着深度学习的快速发展&#xff0c;人工智能技术在各个领域中的应用越来越广泛。机器学习是人工智能的基础&#xff0c;因此&#xff0c;掌握常用…

造血干细胞移植中心的设计SICOLAB

造血干细胞移植中心的设计通常需要考虑以下方面&#xff1a;一、设备和设施包括具备灭菌条件的手术室、空气净化设备、输液泵、监测仪器等。二、空间规划需要根据手术流程和治疗流程合理划分空间&#xff0c;确保空间充足且方便患者活动。1、患者治疗区&#xff1a;包括隔离病房…

【C++】二叉树的非递归遍历

非递归遍历二叉树一、二叉树的前序遍历二、二叉树的中序遍历三、二叉树的后序遍历3.1 方法一3.2 方法二一、二叉树的前序遍历 题目链接 我们可以把任何一棵树看成左路节点&#xff0c;左路节点和右子树。先访问左路节点&#xff0c;再访问左路节点的右子树。在右子树中也重复这…

3. 编码风格

学习的动力不止于此&#xff1a; 谷歌c编码风格指南 学习它就是强&#xff0c;没别的。方便查bug&#xff01; 1.注释说明 //copyright 2023 songshuaibiancheng Inc //License(BSD/GPL/...) //Author: songshu //This is a c style guide/* 版权 许可证 作者 文件内容简短…

字节5年老测试,2月无情被辞。业务与技术你要理解的概念!

前言近年来企业对于员工的要求不再满足于简单的处理工作&#xff0c;除了KPI考核&#xff0c;越来越多的公司会对思考力、理解力进行更深层次的综合评估&#xff0c;对于精准人才的筛选大搞特搞“末位淘汰制”。一个在大厂工作认识几年的朋友跟我说&#xff0c;单一的能力很难受…

Gorm -- 配置连接、Gorm模型及Tag描述

文章目录引入依赖读取配置文件配置数据库连接池定义模型数据库表信息创建对应结构体数据模型中字段的标签属性columnserializerprimaryKeydefaultautoIncrement / AUTO_INCREMENTembedded / embeddedPrefixautoCreateTimeautoUpdateTime-foreignKey / references引入依赖 go g…

Tesseract OCR与文本智能识别

博主简介 博主是一名大二学生&#xff0c;主攻人工智能研究。感谢让我们在CSDN相遇&#xff0c;博主致力于在这里分享关于人工智能&#xff0c;c&#xff0c;Python&#xff0c;爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主&#xff0c;博主会继续更新的&#xff0c…

SQL工具性能实测:居然比Navicat还快,数百万行数据导出仅51秒

如今的SQL语言逐渐成为职场人士必备的能力。为了让更多SQL用户有一款免费又好用的SQL工具&#xff0c;麦聪软件于2023年1月初发布了一款Web版SQL工具SQL Studio&#xff0c;一经推广就赢得了众多用户的注册下载。 使用SQL Studio最明显的体验是什么&#xff1f;笔者回访中发现…

Centos系统里运行java的jar包

目前使用springboot开发是嵌入方式的tomcat&#xff0c;不需要单独使用tomcat&#xff0c;那么经常在服务器上运行jar包&#xff0c;这里记录一下在centos7系统里运行jar的方式。在运行之前需要确定centos7系统是否安装了java环境以及配置环境变量&#xff0c;还有jar需要运行的…

Go语言基准测试(benchmark)三部曲之二:内存篇

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 本篇概览 本文是《Go语言基准测试(benchmark)三部曲》的第二篇&#xff0c;目标是掌握如何用基准测试来观察被测方法的内存分配情况今天除了常规的操作&…

回溯算法章末总结

组合问题的特点 &#xff08;1&#xff09;abba 选中a之后&#xff0c;就不再选了 &#xff08;2&#xff09;找出所有的组合 &#xff08;长度可以不相等&#xff09; 组合问题模板 做回溯题步骤 &#xff08;0&#xff09;判断问题类型 &#xff08;1&#xff09;树状图 …

【百度 JavaScript API v3.0】LocalSearch 位置检索、Autocomplete 结果提示

地名检索移动到指定坐标 需求 在输入框中搜索&#xff0c;在下拉列表中浮动&#xff0c;右侧出现高亮的列表集。选中之后移动到指定坐标。 技术点 官网地址&#xff1a; JavaScript API - 快速入门 | 百度地图API SDK 开发文档&#xff1a;百度地图JSAPI 3.0类参考 实现 …

Pillow图像处理(PIL.Image类的详细使用)

文章目录Opencv、Matplotlib(plt)、Pillow(PIL)、Pytorch读取数据的通道顺序Python图像处理库&#xff08;PIL、Pillow、Scikit-image、Opencv&#xff09;Pillow 官方文档&#xff08;超详细&#xff0c;超推荐&#xff09;一、PIL库与Pillow库的区别二、Pillow库&#xff08;…

Vue3 目录结构

Vue3 目录结构 架构搭建 请确保你的电脑上成功安装 Node.js&#xff0c;本项目使用 Vite 构建工具&#xff0c;需要 Node.js 版本 > 12.0.0。 查看 Node.js 版本&#xff1a; node -v建议将 Node.js 升级到最新的稳定版本&#xff1a; 使用 nvm 安装最新稳定版 Node.js…

使用docker配置mysql主从复制

1.新建主服务器容器实例&#xff1a; docker run -p 3307:3306 --name mysql \ -v /docker/mysql/data:/var/lib/mysql \ -v /docker/mysql/conf:/etc/mysql/conf \ -v /docker/mysql/log:/var/log/mysql \ -e MYSQL_ROOT_PASSWORDroot \ -d mysql:5.7 设置容器卷之后&#xf…

Java网络编程之UDP和TCP套接字

文章目录一. 网络编程概述二. UDP网络编程1. UDP套接字2. UDP客户端回显服务器程序2.1 UDP回显服务器2.2 UDP客户端2.3 UDP实现查词典的服务器三. TCP网络编程1. TCP套接字2. TCP客户端回显服务器程序2.1 TCP回显服务器2.2 TCP客户端2.3 解决服务器无法同时出力多个客户端的问题…

牛客专访ChatGPT:2023校园招聘如何做?附校招趋势

春招在即&#xff0c;牛客作为新一代数智化校园招聘引领者&#xff0c;为大家采访了当下“顶流ChatGPT”&#xff0c;关于近几年校园招聘的变化及2023企业做校招的建议。以下&#xff0c;为“ChatGPT专访”实录。01. ChatGPT眼中近3年校园招聘的变化牛客&#xff1a;很高兴作为…

Unity Material详解

一、创建 二、属性 1.Shader:Unity内置了一些shader&#xff0c;用户自定义的shader也在这里出现. Edit: 可以编辑一些shader可编辑的内容&#xff0c;如一些属性. 2.Rendering Mode:渲染模式 Opaque-不透明-石头适用于所有的不透明的物体Cutout-镂空-破布透明度只有0%和100…

go语言环境配置 项目启动

一 安装go语言 go语言各个版本之间兼容性比较差。所以可能你需要安装固定的版本 1 安装最新版的go brew install go2 查看go可以安装的版本 brew search go3 安装指定版本的go brew install go1.134 查看安装的go语言的版本 go version5 查看go的安装路径 which go || w…

【软件测试】稳定性测试怎么做,这篇文章彻底讲透了~

稳定性对产品的重要性不言而喻。 而作为质量保障&#xff0c;在稳定性测试方面的探索也在不断演化。记得两年前我们做稳定性测试还是基于恒定的压力&#xff0c;7*24小时长时间运行&#xff0c;关注的指标无非是吞吐量TPS的抖动、响应时间的变化趋势&#xff0c;以及各种资源是…