MySQL篇-MySQL存储引擎详解

news2024/10/6 20:27:02

MySQL 执行流程是怎样的?

在这里插入图片描述
可以看到, MySQL 的架构共分为两层:Server 层和存储引擎层,

  • Server 层负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在这实现,主要包括连接器,查询缓存、解析器、预处理器、优化器、执行器等。另外,所有的内置函数(如日期、时间、数学和加密函数等)和所有跨存储引擎的功能(如存储过程、触发器、视图等。)都在 Server 层实现。
  • 存储引擎层负责数据的存储和提取。支持 InnoDB、MyISAM、Memory 等多个存储引擎,不同的存储引擎共用一个 Server 层。现在最常用的存储引擎是 InnoDB,从 MySQL 5.5 版本开始, InnoDB 成为了 MySQL 的默认存储引擎。我们常说的索引数据结构,就是由存储引擎层实现的,不同的存储引擎支持的索引类型也不相同,比如 InnoDB 支持索引类型是 B+树 ,且是默认使用,也就是说在数据表中创建的主键索引和二级索引默认使用的是 B+ 树索引。

接下来详细讲解存储引擎层里面用到的存储引擎。

存储引擎

InnoDB:

事务支持:InnoDB是MySQL的默认存储引擎,支持ACID(原子性、一致性、隔离性、持久性)事务,适用于需要事务支持的应用。
行级锁定:它使用行级锁定,因此在高并发环境中可以提供更好的性能。
外键支持:InnoDB支持外键约束,可以确保数据完整性。
崩溃恢复:具有崩溃恢复功能,可以在数据库故障后自动修复数据。

MyISAM:

性能:在读密集型应用中表现良好,适用于用于数据仓库或读取频繁、写入不频繁的应用。
不支持事务:不支持事务和外键,因此不适用于需要数据完整性和事务支持的应用。
表级锁定:它使用表级锁定,这可能导致在高并发情况下性能瓶颈。

MEMORY(也称为HEAP):

内存表:数据存储在内存中,因此访问速度非常快,适用于需要快速访问的临时数据。
不持久化:数据不持久化,意味着在数据库关闭时数据丢失。
表级锁定:使用表级锁定,因此在高并发环境中可能存在性能问题。

Archive:

压缩存储:用于存储大量历史数据,以较小的存储空间。
只读:只支持插入和选择操作,不支持更新和删除。
不支持索引:不支持普通索引,因此查询速度较慢。

CSV 存储引擎:

特点: CSV(Comma-Separated Values)存储引擎将数据以纯文本形式存储在CSV文件中。这种存储引擎主要用于导入和导出数据,或者在不需要事务支持和高性能要求的情况下存储数据。
适用场景: CSV存储引擎适用于需要将MySQL数据与其他应用程序或数据库进行交互的场景。您可以轻松地导出数据到CSV文件,然后将其导入其他系统。它不适合用于高度事务性的应用程序,因为不支持事务和索引。

Blackhole 存储引擎:

特点: Blackhole存储引擎是一个特殊的存储引擎,它实际上不存储任何数据。它会接受您插入的数据,但会立即丢弃这些数据,不会将其持久化到磁盘上。因此,对Blackhole引擎的写入操作非常快速,但数据将永远不会被检索。
适用场景: Blackhole引擎主要用于复制和数据传输方面的情况。例如,您可以将数据从一个MySQL实例复制到另一个实例,但只关心数据的传输速度而不关心数据在目标实例上的存储。 Blackhole可以用作“黑洞”来暂时存储传输的数据。

InnoDB与MyISAM之间的详细对比

存储引擎事务支持锁定级别外键支持崩溃恢复索引其他特性
InnoDBInnoDB是一个支持事务的存储引擎,它遵循ACID(原子性、一致性、隔离性、持久性)属性,因此非常适合需要数据完整性和事务控制的应用。InnoDB使用行级锁定(row-level locking),这意味着不同的事务可以同时修改表中的不同行,从而提供更好的并发性能。InnoDB支持外键约束,这使得在数据库中建立引用完整性关系变得容易。InnoDB具有崩溃恢复功能,可以在数据库故障后自动修复数据。InnoDB使用聚簇索引(clustered index),这意味着数据行按照主键的顺序存储在磁盘上,这有助于提高范围查询的性能。表级别的锁定:InnoDB也支持表级锁定,但通常不会使用,因为它会在高并发情况下引起性能问题。
MyISAMMyISAM不支持事务,这意味着它不适合需要强烈数据完整性的应用。MyISAM使用表级锁定(table-level locking),这意味着在写入操作时,其他会话将无法同时访问整个表,可能会导致性能瓶颈。MyISAM不支持外键约束,这意味着在数据库中建立引用完整性关系较为复杂,需要在应用层面进行处理。MyISAM在崩溃后不提供自动恢复功能,需要手动进行修复。MyISAM使用非聚簇索引,这意味着索引和数据行是分开存储的,可能导致范围查询性能较差。全文搜索:MyISAM对全文搜索提供了支持,这是一些特定用例的优点。

选择哪个存储引擎取决于您的应用需求。如果您需要事务支持、数据完整性、更好的并发性和崩溃恢复功能,则通常选择InnoDB。如果您有一个只读或只读少写的应用,并且对全文搜索有要求,MyISAM也许更适合。但请注意,MyISAM在MySQL 5.5版本之后逐渐失去了支持,因此推荐优先考虑使用InnoDB或其他现代的存储引擎。

比对了存储引擎,那么就少不了去了解在其中起到关键作用的数据结构,B+树了。

B+树

B+树(B-plus tree)是一种常见的树状数据结构,经常用于数据库和文件系统中的索引结构。B+树索引被广泛用于关系数据库管理系统(RDBMS)中,以加快数据检索速度。以下是关于B+树索引的详细信息:

特点和结构:

  1. 平衡树结构:B+树是一种自平衡的树结构,它保持了所有叶子节点到根节点的最长路径的长度相同,因此查询操作的性能非常稳定,通常是O(log n)时间复杂度。

  2. 多路搜索树:每个非叶子节点都有多个子节点(通常称为分支因子或阶数),这使得B+树能够高效地管理大量数据。

  3. 叶子节点存储数据:B+树的叶子节点包含了实际的数据记录,而非叶子节点仅包含索引信息。这有助于减少磁盘I/O操作,因为查询通常需要访问叶子节点而不是非叶子节点。

  4. 有序性:B+树的叶子节点是按键值有序排列的,这使得范围查询非常高效,因为可以按顺序扫描叶子节点。

  5. 支持等值查找和范围查询:B+树索引既能支持等值查找(例如,查找具有特定键值的记录),又能支持范围查询(例如,查找所有键值在某个范围内的记录)。

应用:

B+树索引广泛应用于关系型数据库管理系统(RDBMS)中,包括MySQL、PostgreSQL、Oracle等。它们用于加速数据库表的数据检索操作。除了数据库系统,B+树索引还可以在文件系统中用于文件的管理,以及在许多其他应用程序中用于维护有序数据集合。

插入和删除操作:

插入和删除操作需要维护B+树的平衡性,确保树的特性不被破坏。通常,插入操作将新的键值插入到适当的位置,然后调整树结构以保持平衡。删除操作也会删除相应的键值,并进行树的重新平衡。

总的来说,B+树索引是一种高效的数据结构,适用于大规模数据的存储和检索。它的平衡性和有序性特点使得它在数据库和文件系统中都有广泛的应用。

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

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

相关文章

Euro-NCAP-HWA测试流程中文版V1.1(2023发布)

定义 在本协议中,使用了以下术语: Vehicle undertest (VUT) – 指根据本规程测试的车辆,车上有碰撞前的碰撞缓解或避免系统 Global VehicleTarget (GVT) – 指本协议中使用的车辆目标,其定义见TB025—Euro-NCAP全球车辆目标规范v1.0 辅助其他车辆(SOV)--指最新的 AEB …

Spring源码相关

总分结构回答,突出关键接口、类、方法名 run -> AbstractApplicationContext.refresh()程序的入口 在IOC中的操作都是基于DefaultListableBeanFactory bd对象保存在map集合中 refresh方法宝包括了整个Spring的执行流程和bean的完整生命…

【Postman-windows-9.12.2版本安装与汉化】

Postman-windows-9.12.2版本安装与汉化 想用英文版本的可以直接点击如下链接下载最新版本 官网最新版本(无法汉化):https://www.postman.com/downloads/ 如果想要汉化的就不能使用最新版本,因为最新版本没有汉化包可以用 汉化包和postman的版本必须是…

RFID技术在危险品仓库中的综合应用

危险仓库内的危化品存放、隔离、堆放数量等需要严格的管控。危险化学品自身所具有的易爆、易燃、毒害、腐蚀、放射等性导致其在生产、经营、存储、运输、使用、废弃处置的过程中安全尤为重要,RFID技术应用避免人为误操作,实现危险品的自动安全核查和规范…

win10家庭版安装docker desktop问题

一、WSL kernel version too low 1、power shell,运行升级命令 wsl --update 2、官网下载wsl2更新包安装 二、Unexcepted WSL error 未找到解决方法,看来只能老老实实用win专业版了。

用go实现http服务端和请求端

一、概述 本文旨在学习记录下如何用go实现建立一个http服务器,同时构造一个专用格式的http客户端。 二、代码实现 2.1 构造http服务端 1、http服务处理流程 基于HTTP构建的服务标准模型包括两个端,客户端(Client)和服务端(Server)。HTTP 请求从客户端…

单片机涉及到这么多行业?

单片机在众多行业中都有广泛应用。汽车电子领域使用单片机来控制引擎、制动系统、安全系统等,提升车辆性能和安全性。不懂的可以看看这一套学习资料包,里面涵盖了一整个嵌入式行业教学资料,不论是小白入门还是精通进阶都包括在内,…

全面提升AD域安全认证 | 竹云IDaaS

传统的微软Active Directory目录已无法适应企业多样化的业务需求,借助身份云您可以快速整合企业本地、云端资源,从而使AD域管理变得更简单、安全、高效。 企业面临的挑战 AD域无法整合现代化系统 AD域仅支持 LDAP 、Kerberos 协议,不能整合…

uniapp 路由模式 history

亲测、比如 uniapp 的 H5 配置: nginx 配置如下,只影响网站下某个目录: location ^~ /test {try_files $uri $uri/ /test/index.html; }

HAProxy Data Plane API 实现对 haproxy 的配置管理

文章目录 前言一、安装1. 下载HAProxy Data Plane API2. 创建 Data Plane API 配置文件 /etc/haproxy/dataplaneapi.hcl3. 修改haproxy的配置文件 二、简单使用1. 查询请求2. 提交修改请求 总结 前言 我们平时对 haproxy 配置的修改,往往是 SSH 连接进去节点&#…

竞赛 基于深度学的图像修复 图像补全

1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学的图像修复 图像补全 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-se…

孙哥Spring源码第25集

第25集、处理代理中获取代理进行方法调用 0、问题所在 1、实现ApplicationContextAware接口实现代理 它的处理是在ApplicationContextAware中处理的 2、ExposeProxy分析 整体 分析 如何设置成了false就会有下面的问题 3、使用EnableAspectJAutoProxy解决代理问题 4、到底如何…

让自己敲代码的速度起飞

前言 打字速度可以说是成为一名程序员的基本功,程序员的打字速度在工作中越来越重要,下面就为大家分享一下我在联系打字速度的时候一些小经验,希望对大家有帮助。 刚开始学习编程的时候,我每天都会抽出1个小时进行打字练习&…

微信小程序实现拍照并拿到图片对象功能

微信小程序提供了函数chooseImage 我们可以在wxml中定义一个按钮 <view><button bindtap"photograph">拍照</button> </view>这里绑定了一个点击事件 叫 photograph 然后 我们在js中编写代码如下 //import { getAll } from "../../ap…

在B站上如何把已经上传的视频做成合集?

参考视频: 【在B站上如何把已经上传的视频做成合集&#xff1f;】 https://www.bilibili.com/video/BV1Uf4y1G7eR/?share_sourcecopy_web&vd_source8af85e60c2df9af1f0fd23935753a933 【B站投稿视频合集的几种方式最全攻略】 https://www.bilibili.com/video/BV1jZ4y1h7…

LLM-TAP随笔——大语言模型基础【深度学习】【PyTorch】【LLM】

文章目录 2.大语言模型基础2.1、编码器和解码器架构2.2、注意力机制2.2.1、注意力机制&#xff08;Attention&#xff09;2.2.2、自注意力机制&#xff08;Self-attention&#xff09;2.2.3、多头自注意力&#xff08;Multi-headed Self-attention&#xff09; 2.3、transforme…

Unity之Hololens如何实现3D物体交互

一.前言 什么是Hololens? Hololens是由微软开发的一款混合现实头戴式设备,它将虚拟内容与现实世界相结合,为用户提供了沉浸式的AR体验。Hololens通过内置的传感器和摄像头,能够感知用户的环境,并在用户的视野中显示虚拟对象。这使得用户可以与虚拟内容进行互动,将数字信…

【算法】算法设计与分析 课程笔记 第二章 递归与分治策略

2.1 递归 直接或间接地调用自身的算法称为递归算法。 用函数自身给出定义的函数称为递归函数。 2.1.1 阶乘 首先得想到一个求阶乘的函数&#xff1a; 这个函数的下面那个式子就用到了调用自身&#xff0c;所以可以用递归来实现&#xff0c;将主问题拆分成若干层的子问题&am…

分享从零开始学习网络设备配置--任务3.7 使用动态路由RIPv2实现网络连通

任务描述 某公司随着规模的不断扩大&#xff0c;路由器的数量开始有所增加。网络管理员发现原有的静态路由已经不适合现在的公司&#xff0c;实施动态路由RIPv2协议配置&#xff0c;实现网络中所有主机之间互相通信。 在路由器较多的网络环境中&#xff0c;手工配置静态路由…

Level FHE 的高效实现 兼容 Level FHE 的高级算法

参考文献&#xff1a; [CS05] Choi Y, Swartzlander E E. Parallel prefix adder design with matrix representation[C]//17th IEEE Symposium on Computer Arithmetic (ARITH’05). IEEE, 2005: 90-98.[SV11] Smart N P, Vercauteren F. Fully homomorphic SIMD operations[…