MySQL知识总结之(存储引擎层)
1.四种存储引擎2.InnoDB存储引擎
2.1介绍2.2优缺点2.3表空间文件2.4查看表空间文件2.5查看参数开关2.6逻辑存储结构 3.MyISAM存储引擎
3.1介绍3.2优缺点3.3文件 4.MEMORY存储引擎
4.1介绍4.2优缺点4.3文件 5.ARCHIVE存储引擎
5.1介绍5.2优缺点 6.查询当前表所用引擎7.建表时指定存储引擎(MyISAM存储引擎)8.建表时指定存储引擎(Memory存储引擎)9.查询当前数据库支持的存储引擎10.InnoDB、MyISAM、Memory区别及特点11.选择引擎(应用场景)
MySQL知识总结之(存储引擎层) 1.四种存储引擎大家可能没有听说过存储引擎,但是一定听过引擎这个词,引擎就是发动机,是一个机器的核心组件。
比如,对于舰载机、直升机、火箭来说,他们都有各自的引擎,是他们最为核心的组件。而我们在选择
引擎的时候,需要在合适的场景,选择合适的存储引擎,就像在直升机上,我们不能选择舰载机的引擎
一样。
而对于存储引擎,也是一样,他是mysql数据库的核心,我们也需要在合适的场景选择合适的存储引
擎。接下来就来介绍一下存储引擎。
存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式 。存储引擎是基于表的,而不是
基于库的,所以存储引擎也可被称为表类型。我们可以在创建表的时候,来指定选择的存储引擎,如果
没有指定将自动选择默认的存储引擎。
2.InnoDB存储引擎 2.1介绍MySQL中常用的四种存储引擎分别是: MyISAM、InnoDB、MEMORY、ARCHIVE。MySQL 5.5版本后默认的存储引擎为InnoDB;
不同的存储引擎没有好坏之分呢,只有在不同的场景使用不同的引擎
2.2优缺点InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在 MySQL 5.5 之后,InnoDB是默认的事务型存储引擎,使用最广泛,基于聚簇索引建立的。InnoDB内部做了很多优化,如能够自动在内存中创建自适应hash索引,以加速读操作。
2.3表空间文件优点:
*DML操作遵循ACID模型,支持事务和崩溃修复能力;
*引入了行级锁,提高并发访问性能;
支持外键FOREIGN KEY约束,保证数据的完整性和正确性;
缺点:占用的数据空间相对较大。
2.4查看表空间文件xxx.ibd:xxx代表的是表名,innoDB引擎的每张表都会对应这样一个表空间文件,xxx.ibd里面存储该表的"表结构"数据、“表中数据”、数据涉及到的索引
早期的"表结构"数据都存储在另一个frm文件里 ;但是8.0之后都存在sdi字典里,sid融入到了ibd文件里
注意:不能直接打开account.ibd来查看,因为都是二进制的,必须得用一下指令来看
account.ibd文件中不仅存放表结构、数据,还会存放该表对应的索引信息。
而该文件是基于二进制存储的,不能直接基于记事本打开,我们可以使用mysql提供的一个指令 ibd2sdi ,从idb这个文件中提取sdi表结构数据而,通过该指令就可以从ibd文件中提取sdi信息,而sdi数据字典信息中就包含该表的表结构。
ibd2sdi account.ibd
显示出来很多json数据,表的字段
参数:innodb_file_per_table
这个参数决定了所有的表共享一个表空间文件还是每一个表都对应一个表空间文件
Mysql8.0版本后这个开关都是默认打开的,即说明每一个表都对应一个表空间文件
on代表开着的,即说明每一个表都对应一个表空间文件
show variables like 'innodb_file_per_table';2.6逻辑存储结构 3.MyISAM存储引擎 3.1介绍
3.2优缺点MyISAM是MySQL早期的默认存储引擎,数据以紧密格式存储。对于只读数据,或者表比较小、可以容忍修复操作,可以使用MyISAM引擎。MyISAM会将表存储在两个文件中,数据文件.MYD和索引文件.MYI
3.3文件优点:
*访问速度快。
缺点:
*MyISAM不支持事务
*支持表锁,不支持行级锁,
*不支持崩溃后的安全恢复
*也不支持外键
xxx.sdi:存储表结构信息
xxx.MYD: 存储数据
xxx.MYI: 存储索引
4.MEMORY存储引擎 4.1介绍sdi文件可以直接用notepad打开,里面时json格式的数据,里面有很多表的字段等等信息
4.2优缺点MEMORY引擎将b表数据全部放在内存中,访问速度较快,但是由于受到硬件问题、或断电问题的影响,一旦系统奔溃的话,数据都会丢失,只能将这些表作为临时表或缓存使用。
MEMORY引擎默认使用哈希索引,将键的哈希值和指向数据行的指针保存在哈希索引中。
4.3文件优点:
访问速度较快
缺点:
1.哈希索引数据不是按照索引值顺序存储,无法用于排序。
2.不支持部分索引匹配查找,因为哈希索引是使用索引列的全部内容来计算哈希值的。
3.只支持等值比较,不支持范围查询。
4.当出现哈希冲突时,存储引擎需要遍历链表中所有的行指针,逐行进行比较,直到找到符合条件的行。
5.ARCHIVE存储引擎 5.1介绍xxx.sdi:存储表结构信息
5.2优缺点ARCHIVE存储引擎非常适合存储大量独立的、作为历史记录的数据。
6.查询当前表所用引擎ARCHIVE提供了压缩功能,拥有高效的插入速度,但是这种引擎不支持索引,所以查询性能较差。
我们可以看到,创建表时,即使我们没有指定存储疫情,数据库也会自动选择默认的存储引擎。
AUTO_INCREMENT=3 代表的是插入一条数据时候申请的的id
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci : 是uft8mb4字符集以及它的排序方式
show create table account;7.建表时指定存储引擎(MyISAM存储引擎)
create table my_myisam( id int, name varchar(10) ) engine = MyISAM ;8.建表时指定存储引擎(Memory存储引擎)
create table my_memory( id int, name varchar(10) ) engine = Memory ;9.查询当前数据库支持的存储引擎
Supports transactions:支持事务
row-levle locking:行级锁
and foregin keys :支持外键
stored in memory :存储在内存当中
useful for temorary tables:通常用来做临时表即缓存
show engines;10.InnoDB、MyISAM、Memory区别及特点
在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。
InnoDB: 是Mysql的默认存储引擎,支持事务、外键。如果应用对事务的完整性有比较高的要求,并且有较高的并发读写频率,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那么InnoDB存储引擎是比较合适的选择。
MyISAM : 对事务完整性没有要求;表的数据都会只读的。如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的。
MEMORY:将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。MEMORY的缺陷就是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性。



