当前位置: 首页 > 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…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...

Android写一个捕获全局异常的工具类

项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...

高防服务器价格高原因分析

高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...

Linux-进程间的通信

1、IPC: Inter Process Communication(进程间通信): 由于每个进程在操作系统中有独立的地址空间,它们不能像线程那样直接访问彼此的内存,所以必须通过某种方式进行通信。 常见的 IPC 方式包括&#…...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)

注:文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件:STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...