【MySQL进阶教程】 存储引擎详细介绍

news2024/11/19 6:38:38

前言

在这里插入图片描述

本文为 【MySQL进阶教程】 存储引擎 相关知识介绍,下边具体将对MySQL体系结构存储引擎介绍存储引擎特点(包含:InnoDBMyISAMMemory的特点及对比),存储引擎选择等进行详尽介绍~

📌博主主页:小新要变强 的主页
👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~
👉Java微服务开源项目可参考:企业级Java微服务开源项目(开源框架,用于学习、毕设、公司项目、私活等,减少开发工作,让您只关注业务!)

在这里插入图片描述

目录

文章标题

  • 前言
  • 目录
  • 一、MySQL体系结构
  • 二、存储引擎介绍
  • 三、存储引擎特点
    • 1️⃣InnoDB
    • 2️⃣MyISAM
    • 3️⃣Memory
    • 4️⃣区别及特点
  • 四、存储引擎选择
  • 后记


在这里插入图片描述


一、MySQL体系结构

在这里插入图片描述

🍀(1)连接层

最上层是一些客户端和链接服务,包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。

🍀(2)服务层

第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如 过程、函数等。在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定表的查询的顺序,是否利用索引等,最后生成相应的执行操作。如果是select语句,服务器还会查询内部的缓存,如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提升系统的性能。

🍀(3)引擎层

存储引擎层, 存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API和存储引擎进行通信。不同的存储引擎具有不同的功能,这样我们可以根据自己的需要,来选取合适的存储引擎。数据库中的索引是在存储引擎层实现的。

🍀(4)存储层

数据存储层, 主要是将数据(如: redolog、undolog、数据、索引、二进制日志、错误日志、查询日志、慢查询日志等)存储在文件系统之上,并完成与存储引擎的交互。

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

二、存储引擎介绍

在这里插入图片描述

大家可能没有听说过存储引擎,但是一定听过引擎这个词,引擎就是发动机,是一个机器的核心组件。比如,对于舰载机、直升机、火箭来说,他们都有各自的引擎,是他们最为核心的组件。而我们在选择引擎的时候,需要在合适的场景,选择合适的存储引擎,就像在直升机上,我们不能选择舰载机的引擎一样。

而对于存储引擎,也是一样,他是mysql数据库的核心,我们也需要在合适的场景选择合适的存储引擎。接下来就来介绍一下存储引擎。

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

🍀(1)建表时指定存储引擎

CREATE TABLE 表名(
字段1 字段1类型 [ COMMENT 字段1注释 ] ,
......
字段n 字段n类型 [COMMENT 字段n注释 ]
) ENGINE = INNODB [ COMMENT 表注释 ] ;

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

show engines;

示例演示:

A. 查询建表语句 — 默认存储引擎: InnoDB

show create table account;

在这里插入图片描述

我们可以看到,创建表时,即使我们没有指定存储疫情,数据库也会自动选择默认的存储引擎。

B. 查询当前数据库支持的存储引擎

show engines ;

在这里插入图片描述

C. 创建表 my_myisam , 并指定MyISAM存储引擎

create table my_myisam(
id int,
name varchar(10)
) engine = MyISAM ;

D. 创建表 my_memory , 指定Memory存储引擎

create table my_memory(
id int,
name varchar(10)
) engine = Memory ;

三、存储引擎特点

上面我们介绍了什么是存储引擎,以及如何在建表时如何指定存储引擎,接下来我们就来介绍下来上面
重点提到的三种存储引擎 InnoDB、MyISAM、Memory的特点。

1️⃣InnoDB

🍀(1)介绍

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

🍀(2)特点

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

🍀(3)文件

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

参数:innodb_file_per_table

show variables like 'innodb_file_per_table';

在这里插入图片描述

如果该参数开启,代表对于InnoDB引擎的表,每一张表都对应一个ibd文件。 我们直接打开MySQL的数据存放目录: C:\ProgramData\MySQL\MySQL Server 8.0\Data , 这个目录下有很多文件夹,不同的文件夹代表不同的数据库,我们直接打开itcast文件夹。

在这里插入图片描述

可以看到里面有很多的ibd文件,每一个ibd文件就对应一张表,比如:我们有一张表 account,就有这样的一个account.ibd文件,而在这个ibd文件中不仅存放表结构、数据,还会存放该表对应的索引信息。 而该文件是基于二进制存储的,不能直接基于记事本打开,我们可以使用mysql提供的一个指令 ibd2sdi ,通过该指令就可以从ibd文件中提取sdi信息,而sdi数据字典信息中就包含该表的表结构。

在这里插入图片描述

🍀(4)逻辑存储结构

在这里插入图片描述

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

2️⃣MyISAM

🍀(1)介绍

MyISAM是MySQL早期的默认存储引擎。

🍀(2)特点

  • 不支持事务,不支持外键
  • 支持表锁,不支持行锁
  • 访问速度快

🍀(3)文件

  • xxx.sdi:存储表结构信息
  • xxx.MYD: 存储数据
  • xxx.MYI: 存储索引

在这里插入图片描述

3️⃣Memory

🍀(1)介绍

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

🍀(2)特点

  • 内存存放
  • hash索引(默认)

🍀(3)文件

xxx.sdi:存储表结构信息

4️⃣区别及特点

在这里插入图片描述

InnoDB引擎与MyISAM引擎的区别 ?

  • ①. InnoDB引擎, 支持事务, 而MyISAM不支持。
  • ②. InnoDB引擎, 支持行锁和表锁, 而MyISAM仅支持表锁, 不支持行锁。
  • ③. InnoDB引擎, 支持外键, 而MyISAM是不支持的。

四、存储引擎选择

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

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

后记

在这里插入图片描述

👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~

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

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

相关文章

学习SpringCloudAlibaba(一)

一、为什么使用SpringCloud Alibaba 有了spring cloud这个微服务的框架,为什么又要使用spring cloud alibaba这个框架了? 最重要的原因在于spring cloud中的几乎所有的组件都使用Netflix公司的产品,然后在其基础上做了一层封装。然而Netfli…

走过 2022

“听过很多道理,依然过不好这一生”。每年写年终总结也是。但是审视自己在过去一年的表现依然是必需的。“吾日三省吾身”,更好的当然是每天都有所反思。世间很多事都离不开反馈,写总结就是一个很好的反馈。经历了过去荒诞的一年,…

开源虚拟机 qemu 安装以及使用方法 (helloos.img)

这篇文章里有 30Day Make OS 光盘的内容,感谢博主 https://blog.csdn.net/monster663/article/details/115919391 链接:https://pan.baidu.com/s/18dz8CuOxN21EAIU3os2KpA 提取码:qwer qemu 牛啤! 从 https://www.qemu.org/down…

【阶段一】Python快速入门05篇:高级特性、pip工具、模块的使用、类(class)与异常处理

本篇的思维导图: 高级特性 列表生成式 现在有一个列表,你需要对该列表中的每个值求平方,然后将结果组成一个新列表。 描述 代码

分享101个PHP源码,总有一款适合您

链接:https://pan.baidu.com/s/1Jh2STRXhYU92KyGuaz_rsQ?pwdjvks 提取码:jvks PHP源码 分享101个PHP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载…

VMware安装银河麒麟V10桌面版虚拟机

VMware安装银河麒麟V10桌面版虚拟机 第一章 VMware安装银河麒麟V10桌面版虚拟机 文章目录VMware安装银河麒麟V10桌面版虚拟机安装环境一、iso下载二、安装步骤1.创建虚拟机2.启动虚拟机,并安装操作系统安装环境 提示:虚拟机安装需要较大的磁盘空间&…

Java——使用多线程从list中不重复地取出数据并进行处理,给多线程任务添加单项任务计时和总耗时

Java——使用多线程从list中不重复地取出数据并进行处理,给多线程任务添加单项任务计时和总耗时一、最简版-无参数传递1.创建业务类,实现Runnable接口2.创建线程,实例化自己创建的业务类并调用3.运行结果二、加强版-有参数传递1.创建业务类&a…

第8季1:海思平台OSD的理论基础

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、OSD概述 1、区域管理模块 “OSD”是“on screen display”的缩写,即在屏幕上播放。 用户需要在视频中叠加OSD或者色块,来显示一些特定信息,比如通道号、时…

浅谈Java并发

Java并发是比较难的知识点,难于对并发的理解。并发要从操作系统和硬件层面去理解,才会比较深入,而不单单是从编程语言的逻辑去理解。 首先对于并发要清楚的几点: 线程可能在任何时刻被切换。 计算机只对硬件指令保证原子性。 CP…

关于一名资深Java程序员在移动端的进阶之路

目录 那年刚毕业 初识移动端 H5开始入门 微信小程序开发 未来的目标(唯有热爱,可抵这岁月漫长) 既然进来了,就帮我点亮五星好评吧,你的五星就是对我最大的支持和鼓励…… https://bbs.csdn.net/topics/611387335 今天呢,就借…

Prometheus配合 alertmanager 使用企业微信告警(坑已平!!!)

部署Prometheus 和 Alertmanager略 安装包部署prometheusGrafananode_exporter_争取不加班!的博客-CSDN博客 prometheus监控报警部署Alertmanager_争取不加班!的博客-CSDN博客 配置企业微信报警 首先使用企业微信创建一个企业 然后点击头像&#xff…

C++进阶 map和set

作者:小萌新 专栏:C进阶 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:简单介绍C中map和set容器 map和set关联式容器树形结构与哈希结构键值对setset的介绍set的定义方式方式一: 构造一个某类型的…

声纹图-声谱图-js之wavesurfer.js(配置、事件、方法中文版翻译)

配置信息 optiontypedefaultEnglish descriptiontranslateaudioRatefloat1Speed at which to play audio. Lower number is slower.播放音频的速度。数值越低,速度越慢。audioContextobjectnoneUse your own previously initialized AudioContext or leave blank.n…

挺进2023 年的JavaScript 框架

瞥见未来的美妙之处在于,道路永远不会完全清晰。我们可以观察趋势,观察创新并尝试规划路线。更好的是,我们可以成为这些创新的一部分来指导方向。但没有什么是确定的。 2022 年发布了大量推动 Web 开发的重大版本。我们看到了 Astro 和 Svel…

Jetson NX + yolov5 v5.0 + TensorRT加速+调用usb摄像头

上一篇笔记记录了如何使用yolov5使用usb摄像头使用权重进行测试,测试效果如下 本篇文章具体操作步骤如下就可以了,切记版本要对应 ,我产生这个错误的原因就是版本问题,成功转换但是还是卡顿,估计是硬件usb问题,加速以后…

2023年最值得学习的10大编程语言

作为一名程序员,我们的目标之一就是学习新技术和编程语言,但是你应该学习哪些语言呢?由于学习一门编程语言既需要时间又需要耐心,因此您应该学习一门值得付出努力的语言;我的意思是,它可以帮助你获得更好的…

2023前端必会手写面试题整理

实现一个compose函数 组合多个函数,从右到左,比如:compose(f, g, h) 最终得到这个结果 (...args) > f(g(h(...args))). 题目描述:实现一个 compose 函数 // 用法如下: function fn1(x) {return x 1; } function fn2(x) {return x 2; } …

UTF-8编码

阅读该文章之前,请阅读以下两篇文章,了解GBK编码和Unicode编码: GBK编码的理解_sgmcy的博客-CSDN博客 Unicode编码的理解_sgmcy的博客-CSDN博客 UTF的意思是:Unicode Transformation Format 。也就是Unicode 转换格式。可见&am…

python初级教程七 JSON 数据解析

JSON 数据解析 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。 Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数: json.dumps(): 对数据进行编码。 json.loads(): 对数据进行解码。 在 json 的编解码过程…

【数据结构】C语言实现双链表

目录 前言 双链表节点定义 接口函数实现 初始化函数 创建节点 打印双链表 尾插节点 尾删节点 头插节点 头删节点 指定位置前插入 删除指定位置节点 改写插入删除 判断链表是否为空 计算链表长度 销毁链表 双链表完整代码 浅谈链表及顺序表 前言 前面我们已经实…