存储引擎是 MySQL 的核心组件之一,负责数据的存储和管理。存储引擎的选择对 MySQL 的性能和可靠性有重要影响.
MySQL 的体系结构可以划分为四层,包括:
连接层:也称为客户端层,负责处理连接请求、身份验证、权限管理等工作。MySQL 支持多种客户端连接方式,包括 TCP/IP 连接、本地连接、命名管道连接等。
服务层:也称为服务器层,负责解析 SQL 查询、生成查询执行计划、执行查询操作等工作。服务层中包含查询缓存、查询分析器、查询优化器等组件。
存储引擎层:MySQL 支持多种存储引擎,存储引擎层负责存储和管理数据。不同的存储引擎具有不同的特点和适用场景,常用的存储引擎包括 InnoDB、MyISAM、Memory 等。
文件系统层(存储层):MySQL 存储数据时使用文件系统,文件系统层负责管理数据库文件,包括数据文件、索引文件、日志文件等。MySQL 支持多种文件系统,包括 Ext4、XFS 等。
注意: 1. 索引(index)是位于存储引擎层的. 不同的存储引擎索引的结构是不一样的 2.InnoDB引擎是MySQL5.5版本后默认的引擎
存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。
例如这里有一张表
create table account( username varchar(10), balance int );
我们来查看一下创建表时候的SQL语句
# 查询建表语句 show create table 表名;
可以看到默认存储引擎是InnoDB.
关于存储引擎的SQL语句
在创建表的时候指定存储引擎.
create table 表名( 字段1 数据类型, 字段2 数据类型, ... )ENGINE=存储引擎;
查询当前数据库支持的存储引擎
show engines;
以下是Mysql支持的存储引擎.会详细介绍InnoDB, MyISAM以及MEMORY这三个存储引擎.
lnnoDB是一种兼顾高可靠性和高性能的通用存储引擎,
InnoDB的特点:
文件: xxx.ibd: xxx代表的是表名,innoDB引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm、 sdi)、数据和索引。
InnoDB的逻辑存储结构有以下部分组成: 行,页,区,段和表空间
行:行是InnoDB存储数据的基本单位,每行表示一条记录。每个表都有一个对应的行格式,行格式规定了行的存储方式,包括数据类型、长度、空间等。
表空间:表空间是InnoDB的存储文件,每个表都有一个对应的表空间,用于存储该表的数据和索引。InnoDB支持多个表共享一个表空间,这样可以更好地利用存储资源。
段:段是表空间中的一个逻辑结构,用于存储数据和索引。InnoDB中有两种类型的段:数据段和索引段。数据段用于存储表中的数据,索引段用于存储索引。
区:区是段的逻辑子结构,用于管理段中的数据和索引。InnoDB中有多个不同类型的区,包括B树节点、自适应哈希索引和插入缓冲区等。
页:页是区的逻辑子结构,是InnoDB存储数据和索引的最小单位。每个页的大小默认为16KB,可以通过配置文件进行修改。
MyISAM是MySQL数据库管理系统的一种存储引擎,是MySQL早期的存储引擎。与InnoDB存储引擎相比,MyISAM的特点是速度快、易于管理、支持全文搜索等特性,但不支持事务、行级锁和高并发等高级特性。
支持全文搜索:MyISAM支持全文搜索,可以对文本数据进行全文检索,极大地提高了查询效率。
速度快:MyISAM的读写速度很快,因为它不支持事务、行级锁等高级特性,所以在高并发的情况下性能表现优越。
易于管理:MyISAM的管理和维护比较简单,因为它不支持事务和行级锁等高级特性,所以在数据恢复和备份等方面更加方便。
数据表结构缓存:MyISAM可以缓存数据表的定义和元数据,从而提高查询效率。
不支持事务和行级锁:MyISAM不支持事务和行级锁定,这意味着它不能保证数据的一致性和完整性,因此在高并发和数据安全性要求较高的应用场景下不适用。
Memory(内存存储引擎)是MySQL数据库管理系统的一种存储引擎,也被称为HEAP存储引擎。与其他存储引擎不同,Memory存储引擎将数据直接存储在内存中,而不是在磁盘上,因此查询速度相对较快。但由于内存有限,Memory存储引擎不适合存储大量数据。
特点:
查询速度快:由于Memory存储引擎将数据直接存储在内存中,查询速度相对较快。
不支持事务:Memory存储引擎不支持事务,因此不能保证数据的一致性和完整性。
支持表锁:Memory存储引擎支持表锁,因此在高并发的情况下可能会产生锁等待。
不支持BLOB和TEXT类型:Memory存储引擎不支持BLOB和TEXT类型的数据,仅支持较小的数据类型。
数据存储在内存中:Memory存储引擎将数据直接存储在内存中,因此数据丢失的风险较高,需要进行定期备份。
在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。
无法缓存在内存中,而且无法保障数据的安全性。
小结: 如果需要高并发、事务支持和数据安全性,建议选择InnoDB存储引擎;如果需要性能更快,但不需要支持事务和数据安全性,建议选择MyISAM存储引擎;如果需要快速查询小规模数据,可以选择Memory存储引擎。同时,还可以根据具体的数据类型、数据量和磁盘空间占用等因素来选择合适的存储引擎。
本文主要讲解MySQL的体系结构(连接层,服务层,存储引擎层和存储层):存储引擎(InnoDB, MyISAM以及MEMORY的特点)以及存储引擎的选择.不同的存储引擎在数据存储方式、读写效率、可靠性、安全性、功能特性等方面有所差异,因此在选择存储引擎时需根据具体需求进行综合考虑。
感谢你的观看!希望这篇文章能帮到你!
专栏:《速通MySQL》在不断更新中,欢迎订阅!
“愿与君共勉,携手共进!”