当前位置: 首页 > news >正文

MSQL系列(八) Mysql实战-SQL存储引擎

Mysql实战-SQL存储引擎

前面我们讲解了索引的存储结构,B+Tree的索引结构,我们一般都知道Mysql的存储引擎有两种,MyISAM和InnoDB,今天我们来详细讲解下Mysql的存储引擎

文章目录

      • Mysql实战-SQL存储引擎
        • 1.存储引擎
        • 2.MyISAM的特点
        • 3. InnoDB的特点
        • 4.InnoDB和MyISAM的对比
        • 5.索引树层级

1.存储引擎
  • 什么是存储引擎?
    MySQL中的数据用各种不同的技术存储在文件(或者内存)中。每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力
    存储引擎就是数据库底层的软件组织,数据库管理系统使用存储引擎来进行增删改查,不同的引擎底层采用不同的存储机制,索引机制,锁机制等等
  • Mysql常用的存储引擎
    Mysql常用的存储引擎有两种, MyISAM和InnoDB
2.MyISAM的特点
  • MyISAM 是MySQL最早的存储引擎
  • MyISAM 支持表级锁定和高速读取
  • MyISAM 既不支持事务、也不支持外键
  • MyISAM 优势是访问速度快,但是表级别的锁定限制了它在读写负载方面的性能
  • MyISAM 它经常应用于只读或者以读为主的数据场景

MyISAM会把数据存储在磁盘上,分别存储成3个文件,其中文件名和表名都相同,但是扩展名分别为:

  • .frm(存储表定义)
  • .MYD(MYData,存储数据)
  • .MYI(MYIndex,存储索引)

MyISAM的索引的索引和数据是分开存储的,他的结构是B+Tree, 在Tree的叶子节点的数据区域存储的是实际数据的地址,指向实际的地址,这种索引就是非聚集索引
在这里插入图片描述

3. InnoDB的特点
  1. InnoDB:MySql 5.6 版本默认的存储引擎
  2. InnoDB 是一个事务安全的存储引擎,它具备提交、回滚以及崩溃恢复的功能以保护用户数
  3. InnoDB InnoDB采用行级锁定,能够提高多用户并发数以及性能
  4. InnoDB 将用户数据存储在聚集索引中以减少基于主键的普通查询所带来的 I/O 开销
  5. InnoDB支持事务处理和外键约束等功能

InnoDB会把数据存储在磁盘上,分别存储成2个文件

  • .frm(存储表定义)
  • ibd(数据和索引文件)

它和MyISAM很大的区别就是InnoDB的数据文件本身就是索引文件,索引和数据是放在一起的,只有一个文件idb文件后缀结尾
InnoDB的索引结构也是B+Tree结构,但是Tree的叶子节点保存的就是完整的数据记录,索引的Key就是表的主键,数据文件本身就是主索引,这就要求表结构必须有主键,即使没有显式的设置主键也会默认生成一个隐式主键

数据和索引在一起,叶子节点包含了完整的数据记录,这种索引就叫做聚集索引

在这里插入图片描述

4.InnoDB和MyISAM的对比
对比InnoDB引擎MyISAM引擎
文件存储方式.frm 后缀是表定义文件,ibd(数据和索引文件一起).frm后缀是表定义文件,.MYD是数据文件,.MYI是索引文件
索引方式B+TreeB+Tree
辅助索引data区域Tree的数据区域data存储的是索引主键的值,所以需要靠辅助索引获得主键,然后用主键到主索引中检索获得记录,也就是回表Tree的数据区域data存储的是索引地址
事务支持支持事务ACID不支持事务
锁机制表级锁,行级锁表级锁
count(*)查询全表扫描MyISAM表级锁直接存储了表行数,count(*)直接读取,无所扫描
读效率效率低效率高
写效率效率高效率低
常用场景读写操作读操作,读多写少
5.索引树层级

经常听到别人说Mysql的索引树一般会在3层,这个是有什么依据?为什么说Mysql的索引树一般都在1-3层的结构?

下面我们来具体的计算一下,看看3层结构可以支持多少数据

  1. 我们可以根据B+树的原理进行一下数据推算,磁盘每页数据为4K
  2. Mysql的B+树 对此又进行了一次调整,在Mysql也有自己的页概念,Mysql每一页数据等于磁盘4页的大小
  3. Mysql里面的一页数据其实是16K,那么也就意味着Mysql里B+树的非叶子节点可存储16K的数据
  4. 我们计算一个索引大小,Mysql规定一个索引占8B,索引和下一级索引之间的下一层地址空间占6B,也就是一个索引是 8+6 =14B
  5. 我们按照每个非叶子节点的16K来计算,Mysql索引树每个节点能容纳(16*1024B)/14B=1170个索引key及指针
  6. 叶子节点是存放数据节点的,假设每条数据的大小是1KB,那么每一个叶子节点都可以存放 16KB/1KB=16个数据
  7. 假设我们现在有一个高度为3的B+Tree存满数据
  8. 第一层 可以只放 索引+指针 1170个
  9. 第二层同样是 1170个索引+指针
  10. 第三层 可以存放16个数据,这里不是索引和指针了,是真实数据

那么三层的树,我们可以存放 1170117016 = 21,902,400 =2KW 两千万条数据,只需要3次I/O操作,我们就可以精确定位数据
所以我们的表数据一般而言都保持在千万级以内,索引树都会保持在3层之内,因此Mysql的索引树一般都在1-3层。


至此,我们彻底的了解了mysql存储引擎的分类及区别,也深入探讨了索引树一般会在3层的底层逻辑

相关文章:

MSQL系列(八) Mysql实战-SQL存储引擎

Mysql实战-SQL存储引擎 前面我们讲解了索引的存储结构,BTree的索引结构,我们一般都知道Mysql的存储引擎有两种,MyISAM和InnoDB,今天我们来详细讲解下Mysql的存储引擎 文章目录 Mysql实战-SQL存储引擎1.存储引擎2.MyISAM的特点3. InnoDB的特…...

vue3 + fastapi 实现选择目录所有文件自定义上传到服务器

文章目录 ⭐前言💖 技术栈选择 ⭐前端页面搭建💖 调整请求content-type传递formData ⭐后端接口实现💖 swagger文档测试接口 ⭐前后端实现效果💖 上传单个文件💖 上传目录文件 ⭐总结⭐结束 ⭐前言 大家好&#xff0c…...

html 常见兼容性问题

目录 前言: 用法: 代码: 1. 盒模型差异: 2. 表格布局问题: 3. 浏览器前缀问题: 4. 字体渲染问题: 理解: 讨论: 前言: 在Web开发中,兼容性问题是常见的挑战之一。不同的浏览器和设备可能以不同的方式解释和呈现HTML,导致网页在某些环境下出现问题…...

PCL 点云投影到圆柱(C++详细过程版)

目录 一、算法原理1、圆柱方程2、投影原理二、代码实现三、结果展示1、原始点云2、投影结果四、参考链接一、算法原理 1、圆柱方程 圆柱方程可以表示为: ( x − x...

以太网链路聚合与交换机堆叠,集群

目录 以太网链路聚合 一.链路聚合的基本概念 二.链路聚合的配置 1.手工模式 2.LACP模式 系统优先级 接口优先级 最大活动接口数 活动链路选举 负载分担 负载分担模式 三.典型使用场景 交换机之间 交换机和服务器之间 交换机和堆叠系统 防火墙双机热备心跳线 四…...

5G RedCap工业智能网关

5G RedCap工业智能网关是当前工业智能化发展领域的重要技术之一。随着物联网和工业互联网的迅速发展,企业对于实时数据传输和高速通信需求越来越迫切。在这种背景下,5G RedCap工业智能网关以其卓越的性能和功能,成为众多企业的首选。 5G RedC…...

STM32-ADC实验

AD转换包括采样阶段和转换阶段。在采样阶段才对通道数据进行;在转换阶段只是将采集的数据进行转换为数字量输出,此刻通道数据变化不会改变转换结果。 实验1:单ADC单通道中断 硬件原理图 由于PC1接到电位器上,所以我们实验选择PC1…...

05、Python -- 爬取ts文件格式视频思路

目录 第一步:爬取一段5秒视频找url代码结果 第二步:下载整个视频的所有片段代码:结果: 第三步:合成视频安装模块代码:结果 简洁代码代码:结果: 最终代码简洁前代码简洁后代码 思路&a…...

【QT】其他常用控件2

新建项目 lineEdit 什么都不显示(linux password) password textEdit和plainTextEdit spinBox和doubleSpinBox timeEdit、dateEdit、dateTimeEdit label 显示图案,导入资源:【QT】资源文件导入_复制其他项目中的文件到qt项目中_St…...

django报错--Not Found The requested URL was not found on the server.

这个问题通常是由于服务器配置或代码错误导致的。以下是解决这个问题的一些建议和步骤: 首先,请确保你的URL拼写正确。确认URL中的路径和文件名都是正确的,并且没有任何拼写错误。如果你是从浏览器中复制粘贴URL,请确保没有任何额…...

VLOOKUP函数的使用方法

VLOOKUP是一个查找函数,给定一个查找的目标,它就能从指定的查找区域中查找返回想要查找到的值。它的基本语法为: VLOOKUP(查找目标,查找范围,返回值的列数,精确OR模糊查找)下面以一个实例来介绍…...

关于前端如何下载后端接口返回content-type为application/octet-stream的文件

关于前端如何下载后端接口返回response-type为application/octet-stream的文件 问题描述 后端接口定义为直接返回一个文件,如果带认证信息可以直接通过浏览器url下载,但是接口需要传headers认证信息,url上又不支持传相关信息 解决 前端…...

报错:SSL routines:ssl3_get_record:wrong version number

一、问题描述 前后端联调的时候,连接后端本地服务器,接口一直pending调不通,控制台还报以下错误: 立马随手搜索了一下解决方案,但是emmm,不符合前端的实际情况: 二、解决方法: 实际…...

Flask后端开发(一)-基础知识和前期准备

目录 1.背景介绍1.1. 项目背景1.2. 项目难点1.3. 项目环境 2. flask后端开发实现的功能3. flask部署和前后端对接3.1. flask运行配置和服务器部署3.2. flask前后端传参 4. 后端测试工具4.1. 工具介绍4.2. 工具使用 后记 1.背景介绍 1.1. 项目背景 就是前几个月临时接手了一个…...

基于SSM的幼儿园管理系统

基于SSM的幼儿园管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringSpringMVCMyBatis工具:IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 管理员界面 摘要 基于SSM(Spring、Spring MVC、MyBatis&#…...

互联网Java工程师面试题·Spring篇·第三弹

目录 ​编辑 4、注解 4.1、什么是基于注解的容器配置 4.2、如何在 spring 中启动注解装配? 4.3、Component, Controller, Repository,Service 有何区别? 4.4、Required 注解有什么用? 4.5、Autowired 注解有什么用? 4.6、…...

前端(二十三)——轮询和长轮询

😫博主:小猫娃来啦 😫文章核心:实现客户端与服务器实时通信的技术手段 文章目录 前言轮询技术轮询的概念轮询的实现原理轮询的优缺点轮询的使用场景 长轮询技术长轮询的概念长轮询的实现原理长轮询的优缺点长轮询的使用场景 轮询与…...

uniapp把文件中的内复制到另一个文件中

使用的是Html 5的plus.io.resolveLocalFileSystemURL方法,文档:HTML5 API Reference var soursePath file:///storage/emulated/0/a/;//用于读取var removePath file:///storage/emulated/0/w/;//用于移除w这个文件夹var targetPath file:///storage/…...

什么是蓝桥杯?什么是蓝桥STEMA考试?

第十五届蓝桥大赛赛事安排? STEMA考试11月(考试时间11月26日) STEMA考试1月(2024年1月) STEMA考试3月(2024年3月) 第十五届蓝桥杯省赛(2024年4月待定) 第十五届蓝桥杯国赛(2024年5月待定) 注:以上时间具体以组委会官方发布为准。 01.蓝桥杯 蓝桥杯全国软件和…...

快递排序Java

快速排序是在工具类常用的排序算法,快速排序的思想主要是选定一个基准元素,然后找到基准元素的位置,然后再分别排序他左边的和他右边的,快速排序是不稳定的,时间复杂度位Nlog(N),最极端的情况就是一个反向排好顺序的数组&#xff…...

会议纪要整理不清?如何将会议成果转化为可落地任务

身边不少HR朋友都有过纪要整理的困扰,一场会议或面谈后,花费大量时间整理,最终产出的纪要却零散杂乱,无法提炼可落地的任务,导致会议效果大打折扣。结合半年多的实测体验,整理出一套零基础也能上手的高效方…...

【Perplexity营养饮食查询实战指南】:3大隐藏技巧让AI精准解读膳食需求并生成个性化食谱

更多请点击: https://kaifayun.com 第一章:Perplexity营养饮食查询实战指南概述 Perplexity 是一款基于大语言模型的智能问答与研究工具,其核心优势在于实时联网检索、引用溯源与多源信息聚合能力。在营养学与健康饮食领域,它可快…...

Skill 不是 Prompt 模板,而是 Code Agent 的领域知识接口

很多人第一次把 Code Agent 接进老项目,都会经历一个落差: Demo 里它能十分钟写完一个 CRUD;一进真实业务系统,它开始犯一些“刚入职新人”才会犯的错。 它能看懂 Controller,却不知道这个字段为什么不能改&#xff…...

【MATLAB源码-第439期】基于MATLAB的APSK与QAM高阶调制在Saleh非线性功放下BER和EVM性能对比

操作环境:MATLAB 2024a1、算法描述摘要 高阶数字调制技术是现代无线通信和卫星通信系统提高频谱利用率的重要方法。QAM 调制通过同相分量和正交分量的幅度组合形成二维星座,在较高信噪比条件下能够获得较高的信息承载能力。APSK 调制则采用多环幅相结构&…...

从一次数据解析Bug说起:彻底搞懂QString的toLocal8Bit、toUtf8和toLatin1该用哪个

从一次数据解析Bug说起:彻底搞懂QString的编码转换选择 上周排查一个网络协议解析问题时,遇到一个典型的编码陷阱:服务端返回的GBK编码数据包,在Qt客户端用toUtf8()解析后出现乱码。这个看似简单的编码问题背后,隐藏着…...

Lenovo Legion Toolkit 终极指南:如何让你的拯救者笔记本性能提升30%

Lenovo Legion Toolkit 终极指南:如何让你的拯救者笔记本性能提升30% 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit …...

Mos:三步解决Mac鼠标滚动卡顿,免费享受触控板般丝滑体验

Mos:三步解决Mac鼠标滚动卡顿,免费享受触控板般丝滑体验 【免费下载链接】Mos 一个用于在 macOS 上平滑你的鼠标滚动效果或单独设置滚动方向的小工具, 让你的滚轮爽如触控板 | A lightweight tool used to smooth scrolling and set scroll direction in…...

信步SV-33A66嵌入式主板:工业智能终端的核心硬件选型与实战解析

1. 项目概述:为什么嵌入式主板是智能终端的“心脏”?在智能设备无处不在的今天,从街角的自助售货机、医院的医疗检测仪,到工厂的自动化产线,这些看似形态各异的设备背后,都有一个共同的“大脑”在默默工作—…...

12306智能抢票助手终极指南:5步实现自动化抢票,告别手动刷票烦恼

12306智能抢票助手终极指南:5步实现自动化抢票,告别手动刷票烦恼 【免费下载链接】12306 12306智能刷票,订票 项目地址: https://gitcode.com/gh_mirrors/12/12306 还在为节假日抢不到火车票而烦恼吗?😫 12306智…...

spring Ai 开发的mcp-由sse改成Streamable HTTP

1.修改pom依赖 //修改前&#xff1a;<!--spring AI 集成MCP--> <!-- <dependency>--> <!-- <groupId>org.springframework.ai</groupId>--> <!-- <artifactId>spring-ai-starter-mcp-server-webmv…...