【MySQL】存储引擎(六)

news2025/1/6 19:21:51

🚗MySQL学习·第六站~
🚩本文已收录至专栏:MySQL通关路
❤️文末附全文思维导图,感谢各位点赞收藏支持~

一.引入

大家可能没有听说过存储引擎,但是一定听过引擎这个词,引擎就是发动机,是一个机器的核心组件。 比如,对于舰载机、直升机、火箭来说,他们都有各自的引擎,是他们最为核心的组件。

在这里插入图片描述
而我们在选择引擎的时候,需要在合适的场景,选择合适的存储引擎,就像在直升机上,我们不能选择舰载机的引擎 一样。 而对于存储引擎,也是一样,他是mysql数据库的核心,我们也需要在合适的场景选择合适的存储引擎。不同的引擎具有不同的应用场景,它们之间没有好坏之分,我们只需在合适的场景选择合适的引擎。

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。我们可以在创建表的时候,来指定选择的存储引擎,如果没有指定将自动选择默认的存储引擎。

二.存储引擎介绍

存储引擎有着很多种,但是我们常用的只有其中三种:InnoDB、MyISAM、Memory

(1) InnoDB

InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在 MySQL 5.5 之后,InnoDB 是 MySQL 默认的存储引擎

它有着如下特点:

  • DML(增删改)操作遵循ACID模型,支持事务
  • 行级锁,提高并发访问性能;
  • 支持外键FOREIGN KEY约束,可以保证数据的完整性和正确性;

默认情况下,innoDB引擎的每张表都会对应这样一个表空间文件(表名.ibd),存储该表的表结构(frm-早期 、sdi-新版)、数据和索引。

它是由参数:innodb_file_per_table 所控制:

-- ON 代表对于InnoDB引擎的表,每一张表都对应一个ibd文件
show variables  like 'innodb_file_per_table';

在这里插入图片描述

我们在文件夹 C:\ProgramData\MySQL\MySQL Server 8.0\Data中查看发现确实如此:
在这里插入图片描述

在每个ibd文件中不仅存放表结构、数据,还会存放该表对应的 索引信息。 该文件是基于二进制存储的,不能直接基于记事本打开,我们可以使用mysql提供的一 个指令 ibd2sdi ,通过该指令就可以从ibd文件中提取sdi信息,而sdi数据字典信息中就包含该表的表结构。
在这里插入图片描述

它的逻辑存储结构是由表空间、段、区、页、行组成的.
在这里插入图片描述

  • 表空间 : InnoDB存储引擎逻辑结构的最高层,ibd文件其实就是表空间文件,在表空间中可以 包含多个Segment段。
  • : 表空间是由各个段组成的, 常见的段有数据段、索引段、回滚段等。InnoDB中对于段的管 理,都是引擎自身完成,不需要人为对其控制,一个段中包含多个区。
  • : 区是表空间的单元结构,每个区的大小为1M。 默认情况下, InnoDB存储引擎页大小为 16K, 即一个区中一共有64个连续的页。
  • : 页是组成区的最小单元,页也是InnoDB 存储引擎磁盘管理的最小单元,每个页的大小默 认为 16KB。为了保证页的连续性,InnoDB 存储引擎每次从磁盘申请 4-5 个区。
  • : InnoDB 存储引擎是面向行的,也就是说数据是按行进行存放的,在每一行中除了定义表时 所指定的字段以外,还包含两个隐藏字段。

(2) MyISAM

MyISAM是MySQL早期的默认存储引擎。它不支持事务,不支持外键,不支持行锁,但是它支持表锁,而且访问速度很快

它的每张表对应着三个文件:

  • 表名.sdi:存储表结构信息

  • 表名.MYD: 存储数据

  • 表名.MYI: 存储索引
    在这里插入图片描述

(3) Memory

Memory引擎的表数据时存储在内存中的,由于受到硬件问题、或断电问题的影响,只能将这些表作为 临时表或缓存使用,他的索引默认为hash索引

它通过 表名.sdi文件存储表结构信息。

(4) 对比选择

特点InnoDBMyISAMMemory
存储限制64TB
事务安全支持××
锁机制行锁表锁表锁
B+tree索引支持支持支持
Hash索引××支持
全文索引支持(5.6版本之后)支持×
空间使用N/A
内存使用中等
批量插入速度
支持外键支持××

在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据 实际情况选择多种存储引擎进行组合。

  • InnoDB: 是Mysql的默认存储引擎,支持事务、外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那么InnoDB存储引擎是比较合适的选择。
  • MyISAM : 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的。例如记录日志信息的表文件。
  • MEMORY:将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。MEMORY的缺陷就是 对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性。

由于目前市面上有更好的MongoDB替代MyISAM存储引擎的功能以及Redis替代MEMORY存储引擎的功能,导致其使用的比较少。

三.相关操作

(1) 查询当前数据库支持的存储引擎

  • 语法
show engines;

在这里插入图片描述

(2) 建表时指定存储引擎

  • 语法
CREATE TABLE  表名(
字段1  字段1类型   [ COMMENT  字段1注释 ],
 ......
字段n  字段n类型   [COMMENT  字段n注释 ] 
) ENGINE = 存储引擎   [ COMMENT  表注释 ];
  • 当我们不指定存储引擎的时候,数据库默认为InnoDB
-- 默认为ENGINE = InnoDB
CREATE TABLE  表名(
字段1  字段1类型   [ COMMENT  字段1注释 ],
 ......
字段n  字段n类型   [COMMENT  字段n注释 ] 
)  [ COMMENT  表注释 ];

(3) 建表后修改存储引擎

  • 语法
alter table 表名 ENGINE = 存储引擎;

在这里插入图片描述

(4) 查看表的存储引擎

  • 我们可以通过查看建表语句来查看当前表所使用的存储引擎
show create table 表名;

在这里插入图片描述

四. 体系结构(补充)

MySQL体系结构分为:连接层 、 服务层、存储引擎层、数据存储层

在这里插入图片描述

  • 连接层负责处理一些客户端和链接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要是接收客户端的一些连接请求,完成一些类似于连接处理、授权认证及相关的安全方案。该层引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。例如:我们连接数据库的时候需要输入账号密码,之后便会在连接层校验我们的用户名和密码是否正确以及所拥有的权限,即能操作哪些数据库、表。
  • 服务层负责完成大多数的核心服务功能,如SQL接口,查询缓存,SQL的分析和优化,部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程、函数等。在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定表的查询的顺序,是否利用索引等, 最后生成相应的执行操作。如果是select语句,服务器还会查询内部的缓存,如果缓存空间足够大, 这 样在解决大量读操作的环境中能够很好的提升系统的性能。
  • 存储引擎层负责了MySQL中数据的存储和提取,服务器通过API和存储引擎进行通信。不同的存储引擎具有不同的功能,我们可以根据自己的需要,来选取合适的存储引擎。数据库中的索引是在存储引擎层实现的,也就是说不同的存储引擎索引的结构是不一样的
  • 数据存储层:存储引擎层控制的是数据如何存、如何取,而数据存储层则是负责将数据(如: redolog、undolog、数据、索引、二进制日志、错误日志、查询 日志、慢查询日志等)存储在文件系统之上,并完成与存储引擎的交互。

和其他数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。这主要体现在存储引擎上,插件式的存储引擎架构,将查询处理和其他的系统任务以及数据的存储提取分离。 这种架构可以根据业务的需求和实际需要选择合适的存储引擎。

五.全文概览

在这里插入图片描述

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

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

相关文章

PCB封装设计指导(十五)验证封装的正确性

PCB封装设计指导(十五)验证封装的正确性 封装建立好之后,我们需要验证封装是否能够正常的放入PCB文件中,最好最直接的办法就是直接放入PCB中来验证。 具体操作如下 任意新建一个空白的PCB文件点击File 选择NEW

搭建关键字驱动自动化测试框架

前言 上篇文章我们已经了解到了数据驱动自动化测试框架是如何构建和驱动测试的!那么这篇文章我们将了解关键字驱动测试又是如何驱动自动化测试完成整个测试过程的。关键字驱动框架是一种功能自动化测试框架,它也被称为表格驱动测试或者基于动作字的测试…

一站式解决方案:Qt 跨平台开发灵活可靠

Qt 是一种跨平台开发工具,为开发者提供了一站式解决方案。无论您的项目目标是 Windows、Linux、macOS、嵌入式系统还是移动平台,Qt 都能胜任。这种跨平台的特性不仅节省开支,还推动了战略的快速落地。 适用范围广泛:Qt 可在多种操…

从新手到专业人士:探索 C++ STL 以获得终极性能

探索 C STL 以获得终极性能 博主简介一、引言二、C STL 简介2.1、STL 是什么?2.2、STL 中的常用组件2.3、STL 的优点 三、入门指南:了解基本概念和用法3.1、容器:vector、list、deque、set、map 等3.2、算法:查找、排序、遍历等3.…

C# IO FileStream流(一)使用整理

一、C# IO 文件流,常用操作整理 来自其他开发者的整理: 文件操作常用相关类 1)Directory //操作目录(文件夹),静态类。2)Path//静态类,对文件或目录的路径进行操作(很方便)【字符…

解决Element-Plus中Swtich @change自动被触发的问题

如图所示 这个switchChange事件在初始化的时候会被自动触发 烦得很 解决方法 如图所示 第471行 通过判断是否还有其它某元素再往下执行 如果你有其它方法 请你在评论区教我下哈 3q

智慧园区楼宇合集 | 图扑数字孪生管控系统

智慧园区是指将物联网、大数据、人工智能等技术应用于传统建筑和基础设施,以实现对园区的全面监控、管理和服务的一种建筑形态。通过将园区内设备、设施和系统联网,实现数据的传输、共享和响应,提高园区的管理效率和运营效益,为居…

【MySQL】索引 (八)

🚗MySQL学习第八站~ 🚩本文已收录至专栏:MySQL通关路 ❤️文末附全文思维导图,感谢各位点赞收藏支持~ 一.引入 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。数据库除了存储数据之外,…

Vue异步更新、$nextTick

需求:编辑标题, 编辑框自动聚焦 1. 点击编辑,显示编辑框 2. 让编辑框, 立刻获取焦点 this. isShowEdit true // 显示输入框 this . $refs . inp . focus () // 获取焦点 问题:"显示之后",立刻获…

Bash编程

目录: bash编程语法bash脚本编写 1.bash编程语法 Bash 编程基础 变量引号数组控制语句函数 Bash 变量 语法: Variable_namevalue Bash 变量定义的规则 变量名区分大小写,a和A为两个不同的变量。变量名可以使用大小写字母混编的形式进行…

淘票猫影城系统-Spring Boot版

文章目录 一、引言TIPSticketcatticketcat-wechat-miniprogramticketcat-web-userticketcat-web-manager 三、项目截图wechat-miniprogramweb-userweb-manager 四、License 前往闪闪の小窝以获得更好的阅读和评论体验 一、引言 项目地址: 项目名项目内容项目地址开…

【Java】String类常用方法总结

文章目录 1丶boolean equals(Object anObject) 方法2丶int compareTo(String s) 方法3、 int compareToIgnoreCase(String str) 方法4丶字符串查找常用方法.5.丶字符串转化常用方法.大小写转换字符串转数组 6丶字符串替换7丶字符串拆分8丶字符串截取9丶去掉左右空格&#xff08…

备战秋招 | 笔试强训14

目录 一、选择题 二、编程题 三、选择题题解 四、编程题题解 一、选择题 1、下列有关this指针使用方法的叙述正确的是() A. 保证基类保护成员在子类中可以被访问 B. 保证基类私有成员在子类中可以被访问 C. 保证基类共有成员在子类中可以被访问 D.…

机器学习 day31(baseline)

语音识别的Jtrain、Jcv和人工误差 对于逻辑回归问题,Jtrain和Jcv可以用分类错误的比例,这一方式来代替单单只看Jtrain,不好区分是否高偏差。可以再计算人类识别误差,即人工误差,作为基准线Jtrain与baseline对比只高了…

keepalived + lvs (服务端socket 客户端socket) udp协议

1、Keepalived 1. 1 keepalived 简介 1.1.1 什么是keepalived Keepalived一个基于VRRP 协议来实现的 LVS 服务高可用方案,可以利用其来解决单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER)&#xff…

MFC第二十二天 三种绘图句柄与三大坐标系(三大CDC派生类)简介以及应用、Invalidate刷新函数的功能和用法简介

文章目录 三种绘图句柄与三大坐标系(三大CDC派生类)简介以及应用三种HDC句柄三大CDC派生类什么是放泄露架构使用HDC句柄进行常见图形绘制演示 HPEN和HBRUSH句柄HPEN的创建 Invalidate刷新函数的功能和用法简介应用Win32下MFC下 附录 三种绘图句柄与三大坐…

【算法题解】51. 二叉树的最近公共祖先

这是一道 中等难度 的题 https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/ 题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为…

Transformer+医学图像最新进展【2023】

Transformer主要用于自然语言处理领域。近年来,它在计算机视觉(CV)领域得到了广泛的应用。医学图像分析(MIA,Medical image analysis)作为机器视觉(CV,Computer Vision)的一个重要分支,也极大地受益于这一最先进的技术。 机构:新加坡国立大学机械工程系、中山大学智能系…

MySQL创建全文索引时,遇到“Temporary file write failure”的错误

MySQL创建全文索引时,遇到“Temporary file write failure”的错误 环境信息 MySQL Version: 8.0.28 engine: InnoDB rows: 100 index length: 10MB data length: 30MB 笔者在MYSQL上执行创建添加全文索引的语句:alter table users add fulltext index …

机器学习原理(1)集成学习基本方法

一.什么是集成学习 集成学习(ensemble learning)通过将多个学习器进行组合来完成学习任务。下图显示集成学习的一般结构(取自周志华老师的西瓜书),个体学习器通常由一种现有的学习算法从训练数据产生,例如…