MySQL进阶-----存储引擎

目录

前言

一、MySQL体系结构

二、存储引擎介绍

三、存储引擎特点

1.InnoDB

 2.MyISAM

3.Memory

4.区别及特点

四、存储引擎选择


前言

        从本期开始,我们就正式进入到MySQL进阶篇的学习了,前面的基础篇就告一段落了。进阶篇的第一期我们就从MySQL的存储引擎去开始介绍,介绍MySQL存储引擎的使用历史以及各种存储引擎的分类和功能特点。

一、MySQL体系结构

1.连接层
最上层是一些客户端和链接服务,包含本地 sock 通信和大多数基于客户端 / 服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL 的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。
2.服务层
第二层架构主要完成大多数的核心服务功能,如 SQL 接口,并完成缓存的查询, SQL 的分析和优化,部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如 过程、函数等。在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定表的查询的顺序,是否利用索引等,最后生成相应的执行操作。如果是select 语句,服务器还会查询内部的缓存,如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提升系统的性能。
3.引擎层
存储引擎层, 存储引擎真正的负责了 MySQL 中数据的存储和提取,服务器通过 API 和存储引擎进行通信。不同的存储引擎具有不同的功能,这样我们可以根据自己的需要,来选取合适的存储引擎。数据库中的索引是在存储引擎层实现的。
4.存储层
数据存储层, 主要是将数据 ( : redolog undolog 、数据、索引、二进制日志、错误日志、查询日志、慢查询日志等) 存储在文件系统之上,并完成与存储引擎的交互。和其他数据库相比,MySQL 有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎上,插件式的存储引擎架构,将查询处理和其他的系统任务以及数据的存储提取分离。 这种架构可以根据业务的需求和实际需要选择合适的存储引擎。

二、存储引擎介绍

        大家可能没有听说过存储引擎,但是一定听过引擎这个词,引擎就是发动机,是一个机器的核心组件。 比如,对于舰载机、直升机、火箭来说,他们都有各自的引擎,是他们最为核心的组件。而我们在选择引擎的时候,需要在合适的场景,选择合适的存储引擎,就像在直升机上,我们不能选择舰载机的引擎一样。
        而对于存储引擎,也是一样,他是mysql 数据库的核心,我们也需要在合适的场景选择合适的存储引擎。接下来就来介绍一下存储引擎。
        存储引擎就是存储数据、建立索引、更新/ 查询数据等技术的实现方式 。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。我们可以在创建表的时候,来指定选择的存储引擎,如果没有指定将自动选择默认的存储引擎。
1.查询当前数据库支持的存储引擎
show engines;
2.建表时指定存储引擎
CREATE TABLE 表名(
字段1 字段1类型 [ COMMENT 字段1注释 ] ,
......
字段n 字段n类型 [COMMENT 字段n注释 ]
) ENGINE = INNODB [ COMMENT 表注释 ] ;

 示例演示:

A. 查询建表语句 --- 默认存储引擎 : InnoDB
show create table account;

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

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

show engines;

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

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

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

create table 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 , 这个目录下有很多文件夹,不同的文件夹代表不同的数据库,我们直接打开当前表所在数据库的 文件夹。
可以看到里面有很多的 ibd 文件,每一个 ibd 文件就对应一张表,比如:我们有一张表 account ,就
有这样的一个 account.ibd 文件,而在这个 ibd 文件中不仅存放表结构、数据,还会存放该表对应的
索引信息。 而该文件是基于二进制存储的,不能直接基于记事本打开,我们可以使用 mysql 提供的一个指令 ibd2sdi ,通过该指令就可以从 ibd 文件中提取 sdi 信息,而 sdi 数据字典信息中就包含该表
的表结构。
在这里输入cmd,然后回车。

然后输入这个指令 ibd2sdi account.ibd 回车。

上面就是当前ibd文件的结构json字符串。

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

Memory

存储限制

64TB

事务安全

支持

-

-

锁机制

行锁

表锁

表锁

B+tree索引

支持

支持

支持

Hash索引

-

-

支持

全文索引

支持(5.6版本之后)

支持

-

空间使用

N/A

内存使用

中等

批量插入速度

支持外键

支持

-

-

面试题:
InnoDB引擎与MyISAM引擎的区别 ?
①. InnoDB引擎, 支持事务, 而MyISAM不支持。
②. InnoDB引擎, 支持行锁和表锁, 而MyISAM仅支持表锁, 不支持行锁。
③. InnoDB引擎, 支持外键, 而MyISAM是不支持的。
主要是上述三点区别,当然也可以从索引结构、存储限制等方面,更加深入的回答,具体参
考如下官方文档:
https://dev.mysql.com/doc/refman/8.0/en/innodb-introduction.html
https://dev.mysql.com/doc/refman/8.0/en/myisam-storage-engine.html

四、存储引擎选择

在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。
  • InnoDB: Mysql的默认存储引擎,支持事务、外键。如果应用对事务的完整性有比较高的要 求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那么InnoDB存储引擎是比较合适的选择。
  • MyISAM : 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的。
  • MEMORY:将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。MEMORY的缺陷就是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性。
以上就是本期的内容,我们下次见!
分享一张壁纸:

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

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

相关文章

opengl 学习(六)-----坐标系统与摄像机

坐标系统与摄像机 分类引言坐标系统摄像机教程在CMake中使用全局定义预编译宏,来控制是否开启错误检查补充 分类 opengl c 引言 OpenGL希望在每次顶点着色器运行后,我们可见的所有顶点都为标准化设备坐标(Normalized Device Coordinate, NDC)。也就是说&#xff…

Python使用指定端口进行http请求的例子

使用requests库 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class SourcePortAdapter(HTTPAdapter): """"Transport adapter" that allows us to set the source port.""" def __init__(self, port, *args, **kwargs): self.poolm…

JetPack之LiveData粘性原因分析及hook解决

目录 前言一、LiveData粘性原因分析1.1 发送消息流程1.2 监听消息流程1.3 根因分析 二、hook解决 前言 在 Android 中,LiveData 的默认行为是粘性的,即 LiveData 在设置数据后,即使观察者订阅时已经有数据存在,观察者仍会立即收到…

【链表】Leetcode 19. 删除链表的倒数第 N 个结点【中等】

删除链表的倒数第 N 个结点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5] 解题思路 1、使用快慢指针找到要删除节点的前一个节点。2、删…

使用Jmeter进行http接口测试的实践

前言: 本文主要针对http接口进行测试,使用Jmeter工具实现。 Jmter工具设计之初是用于做性能测试的,它在实现对各种接口的调用方面已经做的比较成熟,因此,本次直接使用Jmeter工具来完成对Http接口的测试。 一、开发接口…

深入理解二叉树构建和中序遍历

在计算机科学中,二叉树是一种重要的数据结构,用于模拟层次化结构的关系。本文将介绍一个简单的C语言程序,该程序实现了对输入字符数组的解析,并构建相应的二叉树,随后对二叉树进行中序遍历。 二叉树定义 首先&#x…

Redis监控工具

Redis 是一种 NoSQL 数据库系统,以其速度、性能和灵活的数据结构而闻名。Redis 在许多领域都表现出色,包括缓存、会话管理、游戏、排行榜、实时分析、地理空间、叫车、聊天/消息、媒体流和发布/订阅应用程序。Redis 数据集完全存储在内存中,这…

揭秘爆红AI图像增强神器:Magnific AI如何做到1亿像素放大?

最近有个很火的AI图像增强应用,叫Magnific AI。 你知道吗,它发布一个多月就有40万人注册了! 这个应用确实非常实用,它不仅利用AI技术放大了图像,还能提升分辨率,从而使图片呈现得更加清晰。 值得一提的是…

扩展以太网(数据链路层)

目录 一、在物理层扩展以太网 二、在数据链路层扩展以太网 三、以太网交换机的特点 四、以太网交换机的交换方式 五、以太网交换机的自学习功能 六、小结 一、在物理层扩展以太网 使用光纤扩展: • 主机使用光纤(通常是一对光纤)和…

跨境电商商品数据集爬取方案|跨境电商商品采集API接口

跨境电商数据集介绍 我们就以电商商品的数据集作为依托,从而来了解什么是数据集,可以通过什么方式来进行数据集的获取。 什么是数据集 电商商品数据集通常是指收集自电子商务平台的商品信息的结构化数据集合。这些数据包括但不限于商品名称、价格、描…

有关Theano和PyTensor库

根据Github里面的介绍,PyTensor是源于Theano, Theano目前应该已经不再开发了,更新都是很多年前。 因此PyTensor在背景介绍中说 PyTensor is a fork of Aesara, which is a fork of Theano. Theano和PyTensor都是计算相关的库,可以…

数据结构面试常见问题之- Sort with Swap(0,*)

😀前言 在数据结构面试中,排序算法是考察重点之一。传统的排序算法,例如冒泡排序、快速排序等,都依赖于元素之间的比较和交换操作。然而,在某些情况下,我们可能只允许使用特定的交换操作,例如只…

【网络原理】详解HTTPS协议加密过程

文章目录 🌴HTTPS协议是什么?🎄运营商劫持事件🌲HTTPS的工作过程🌸对称加密🌸非对称加密🌸引入证书🌸完整流程 🌳HTTPS加密总结⭕总结 🌴HTTPS协议是什么&…

Spring Cloud Alibaba微服务从入门到进阶(七)(服务容错-Sentinel)

雪崩效应 我们把基础服务故障,导致上层服务故障,并且这个故障不断放大的过程,成为雪崩效应。 雪崩效应,往往是因为服务没有做好容错造成的。 微服务常见容错方案 仓壁模式 比如让controller有自己独立的线程池,线程池满…

Windows 设置多显示器显示

Windows 设置多显示器显示 1. Windows 7 设置 HDMI 输出2. Windows 11 设置多显示器显示References 1. Windows 7 设置 HDMI 输出 2. Windows 11 设置多显示器显示 ​​​ References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

畅谈AIGC,ISIG-AIGC技术与应用发展峰会成功举办

3月16日,第四届ISIG中国产业智能大会在上海中庚聚龙酒店如期开幕,此次大会由苏州市金融科技协会指导、企智未来科技(RPA中国、LowCode低码时代、AIGC开放社区)主办。大会聚集了来自不同领域的专家学者、行业领军人物及技术研发者&…

Linux系统——nload命令

目录 引言 一、nload安装 二、nload命令详解 1.命令使用 2.命令详解 3.命令选项 3.1-u选项 nload -u h 自动变更单位,Bit/s nload -u H 自动变更单位,Byte/s 3.2-m选项 nload -m 不显示流量图 nload -m -H ens33 不显示流量图,以By…

深度学习训练前标准的LMDB文件(data.mdb和lock.mdb)制作(附代码)

目录 一、LMDB文件二、准备训练集三、安装basicsr包四、LMDB文件制作4.1 参数修改4.2 其它格式图片修改4.3 代码4.4 转换结果4.4.1 data.mdb文件4.4.2 lock.mdb文件4.4.3 meta_info.txt文件 五、总结 一、LMDB文件 在训练的时候使用LMDB 存储形式可以加快IO 和CPU 解压缩的速度…

点餐小程序开发:如何通过抽奖与消费者互动

随着科技的发展,越来越多的商家开始使用点餐小程序来提升自己的服务质量和效率。然而,仅仅提供点餐服务并不能满足消费者的需求,他们还需要一种方式来增加与商家的互动,提高消费体验。抽奖活动就是一种非常有效的互动方式&#xf…