【MySQL】存储引擎

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 存储引擎是 MySQL 的核心组件之一,负责数据的存储和管理。存储引擎的选择对 MySQL 的性能和可靠性有重要影响.

1. 前言

存储引擎是 MySQL 的核心组件之一,负责数据的存储和管理。存储引擎的选择对 MySQL 的性能和可靠性有重要影响.


2. MySQL的体系结构

MySQL 的体系结构可以划分为四层,包括:


连接层:也称为客户端层,负责处理连接请求、身份验证、权限管理等工作。MySQL 支持多种客户端连接方式,包括 TCP/IP 连接、本地连接、命名管道连接等。


服务层:也称为服务器层,负责解析 SQL 查询、生成查询执行计划、执行查询操作等工作。服务层中包含查询缓存、查询分析器、查询优化器等组件。


存储引擎层:MySQL 支持多种存储引擎,存储引擎层负责存储和管理数据。不同的存储引擎具有不同的特点和适用场景,常用的存储引擎包括 InnoDB、MyISAM、Memory 等。


文件系统层(存储层):MySQL 存储数据时使用文件系统,文件系统层负责管理数据库文件,包括数据文件、索引文件、日志文件等。MySQL 支持多种文件系统,包括 Ext4、XFS 等。


236f5357027f4a418ca21a2051f8196a.png


注意: 1. 索引(index)是位于存储引擎层的. 不同的存储引擎索引的结构是不一样的 2.InnoDB引擎是MySQL5.5版本后默认的引擎


3. 存储引擎简介

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。


例如这里有一张表

create table account(
    username varchar(10),
    balance int
);

我们来查看一下创建表时候的SQL语句


# 查询建表语句
show create table 表名;


4898d41d745946518e6651c31f29b8af.png


可以看到默认存储引擎是InnoDB.

关于存储引擎的SQL语句

在创建表的时候指定存储引擎.


create table 表名(
  字段1 数据类型,
  字段2 数据类型,
  ...
)ENGINE=存储引擎;

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


show engines;

以下是Mysql支持的存储引擎.会详细介绍InnoDB, MyISAM以及MEMORY这三个存储引擎.

ef3b52c300414151946300dcfd9b93f1.png


4. InnoDB介绍

lnnoDB是一种兼顾高可靠性和高性能的通用存储引擎,


InnoDB的特点:


1.支持事务:InnoDB支持ACID事务,确保了数据的完整性和一致性。

2.支持行级锁定:InnoDB使用行级锁定,使并发访问和修改数据变得更加高效。

3.支持外键约束:InnoDB支持外键约束,使数据之间的联系更加严密和规范。

4.支持快照读取:InnoDB支持快照读取,使读取操作不会被写入操作所阻塞,提高了数据库的并发性能。

5.支持多版本并发控制:InnoDB使用多版本并发控制(MVCC)来处理并发访问,使读写操作可以同时进行,提高了数据库的并发性能。

6.支持自适应哈希索引:InnoDB可以自动创建和管理哈希索引,提高了查询性能。

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


InnoDB的逻辑存储结构有以下部分组成: 行,页,区,段和表空间


1.行:行是InnoDB存储数据的基本单位,每行表示一条记录。每个表都有一个对应的行格式,行格式规定了行的存储方式,包括数据类型、长度、空间等。


2.表空间:表空间是InnoDB的存储文件,每个表都有一个对应的表空间,用于存储该表的数据和索引。InnoDB支持多个表共享一个表空间,这样可以更好地利用存储资源。


3.段:段是表空间中的一个逻辑结构,用于存储数据和索引。InnoDB中有两种类型的段:数据段和索引段。数据段用于存储表中的数据,索引段用于存储索引。


4.区:区是段的逻辑子结构,用于管理段中的数据和索引。InnoDB中有多个不同类型的区,包括B树节点、自适应哈希索引和插入缓冲区等。


5.页:页是区的逻辑子结构,是InnoDB存储数据和索引的最小单位。每个页的大小默认为16KB,可以通过配置文件进行修改。


5. MyISAM介绍

MyISAM是MySQL数据库管理系统的一种存储引擎,是MySQL早期的存储引擎。与InnoDB存储引擎相比,MyISAM的特点是速度快、易于管理、支持全文搜索等特性,但不支持事务、行级锁和高并发等高级特性。


1.支持全文搜索:MyISAM支持全文搜索,可以对文本数据进行全文检索,极大地提高了查询效率。


2.速度快:MyISAM的读写速度很快,因为它不支持事务、行级锁等高级特性,所以在高并发的情况下性能表现优越。


3.易于管理:MyISAM的管理和维护比较简单,因为它不支持事务和行级锁等高级特性,所以在数据恢复和备份等方面更加方便。


4.数据表结构缓存:MyISAM可以缓存数据表的定义和元数据,从而提高查询效率。


5.不支持事务和行级锁:MyISAM不支持事务和行级锁定,这意味着它不能保证数据的一致性和完整性,因此在高并发和数据安全性要求较高的应用场景下不适用。


6. Memory

Memory(内存存储引擎)是MySQL数据库管理系统的一种存储引擎,也被称为HEAP存储引擎。与其他存储引擎不同,Memory存储引擎将数据直接存储在内存中,而不是在磁盘上,因此查询速度相对较快。但由于内存有限,Memory存储引擎不适合存储大量数据。


特点:


1.查询速度快:由于Memory存储引擎将数据直接存储在内存中,查询速度相对较快。


2.不支持事务:Memory存储引擎不支持事务,因此不能保证数据的一致性和完整性。


3.支持表锁:Memory存储引擎支持表锁,因此在高并发的情况下可能会产生锁等待。


4.不支持BLOB和TEXT类型:Memory存储引擎不支持BLOB和TEXT类型的数据,仅支持较小的数据类型。


5.数据存储在内存中:Memory存储引擎将数据直接存储在内存中,因此数据丢失的风险较高,需要进行定期备份。


7. 存储引擎的选择

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


InnoDB∶是Mysql的默认存储引擎,支持事务、外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那么InnoDB存储引擎是比较合适的选择。

MyISAM:如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的。

MEMORY:将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。MEMORY的缺陷就是对表的大小有限制,太大的表

无法缓存在内存中,而且无法保障数据的安全性。

小结: 如果需要高并发、事务支持和数据安全性,建议选择InnoDB存储引擎;如果需要性能更快,但不需要支持事务和数据安全性,建议选择MyISAM存储引擎;如果需要快速查询小规模数据,可以选择Memory存储引擎。同时,还可以根据具体的数据类型、数据量和磁盘空间占用等因素来选择合适的存储引擎。


8. 总结

本文主要讲解MySQL的体系结构(连接层,服务层,存储引擎层和存储层):存储引擎(InnoDB, MyISAM以及MEMORY的特点)以及存储引擎的选择.不同的存储引擎在数据存储方式、读写效率、可靠性、安全性、功能特性等方面有所差异,因此在选择存储引擎时需根据具体需求进行综合考虑。


感谢你的观看!希望这篇文章能帮到你!

专栏:《速通MySQL》在不断更新中,欢迎订阅!

“愿与君共勉,携手共进!”


8fbf2a7f2d0e4db782e58035677a303d.png

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 SQL 关系型数据库
MySQL存储引擎
本文介绍了数据库优化的多个方面,包括选择合适的存储引擎、字段定义原则、避免使用外键和触发器、大文件存储策略、表拆分及字段冗余处理等。强调了从业务层面进行优化的重要性,如通过活动设计减少外部接口调用,以及在高并发场景下的流量控制与预处理措施。文章还提供了具体的SQL优化技巧和表结构优化建议,旨在提高数据库性能和可维护性。
MySQL存储引擎
|
1月前
|
存储 缓存 关系型数据库
【赵渝强老师】MySQL的MyISAM存储引擎
在MySQL5.1版本之前,默认存储引擎为MyISAM。MyISAM管理非事务表,提供高速存储和检索,支持全文搜索。其特点包括不支持事务、表级锁定、读写互阻、仅缓存索引等。适用于读多、写少且对一致性要求不高的场景。示例代码展示了MyISAM存储引擎的基本操作。
|
1月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL的InnoDB存储引擎
InnoDB是MySQL的默认存储引擎,广泛应用于互联网公司。它支持事务、行级锁、外键和高效处理大量数据。InnoDB的主要特性包括解决不可重复读和幻读问题、高并发度、B+树索引等。其存储结构分为逻辑和物理两部分,内存结构类似Oracle的SGA和PGA,线程结构包括主线程、I/O线程和其他辅助线程。
【赵渝强老师】MySQL的InnoDB存储引擎
|
1月前
|
存储 关系型数据库 MySQL
【赵渝强老师】MySQL的Memory存储引擎
MySQL 的存储引擎层负责数据的存储和提取,支持多种存储引擎,如 InnoDB、MyISAM 和 Memory。InnoDB 是最常用的存储引擎,从 MySQL 5.5.5 版本起成为默认引擎。Memory 存储引擎的数据仅存在于内存中,重启后数据会丢失。示例中创建了使用 Memory 引擎的 test3 表,并展示了数据在重启后消失的过程。
|
2月前
|
存储 SQL 缓存
MySQL存储引擎如何完成一条更新语句的执行!
MySQL存储引擎如何完成一条更新语句的执行!
MySQL存储引擎如何完成一条更新语句的执行!
|
3月前
|
存储 缓存 关系型数据库
MySQL高级篇——存储引擎和索引
MyISAM:不支持外键和事务,表锁不适合高并发,只缓存索引,内存要求低,查询快MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务、行级锁、外键,有一个毫无疑问的缺陷就是崩溃后无法安全恢复。5.5之前默认的存储引擎优势是访问的速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用针对数据统计有额外的常数存储。故而 count(*) 的查询效率很高表名.frm 存储表结构;表名.MYD 存储数据 (MYData);
MySQL高级篇——存储引擎和索引
|
4月前
|
存储 关系型数据库 MySQL
MySQL 中的事务存储引擎深入解析
【8月更文挑战第31天】
64 0
|
6月前
|
存储 关系型数据库 MySQL
|
5月前
|
存储 关系型数据库 MySQL
MySQL InnoDB存储引擎的优点有哪些?
上述提到的特性和优势使得InnoDB引擎非常适合那些要求高可靠性、高性能和事务支持的场景。在使用MySQL进行数据管理时,InnoDB通常是优先考虑的存储引擎选项。
188 0
|
6月前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第一篇(存储引擎与Linux系统上安装MySQL数据库)
MySQL数据库进阶第一篇(存储引擎与Linux系统上安装MySQL数据库)