个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【MySQL学习专栏】🎈
本专栏旨在分享学习MySQL的一点学习心得,欢迎大家在评论区讨论💌
目录
- 一、什么是存储引擎
- 二、InnoDB
- 三、MyISAM
- 四、Memory
- 五、存储引擎选择
一、什么是存储引擎
概念:存储引擎作为MySQL中的核心部分,它是MySQL数据库中建立索引、更新/查询数据等技术的实现方式(不同的存储引擎建立索引、更新/查询数据的机制是不同的)。另外,存储引擎是基于数据库表的而不是基于数据库的,即一个数据库的多张表是可以选择不同存储引擎的,故存储引擎也被称之为表类型。
我们通过建表语句来看一下存储引擎:
创建表的时候,我们是可以指定存储引擎的,如果不指定的话,默认的存储引擎就是InnoDB。
语法1:创建表时,要指定存储引擎,语法格式如下:
create table 表名(字段1 字段1类型 [comment 字段1注释],...字段n 字段n类型 [comment 字段n注释]
) engine = innodb [comment 表注释];
语法2:查看当前数据库支持的存储引擎
语法格式:show engines;
执行结果如下:
二、InnoDB
概念:InnoDB时一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之后,InnoDB是默认的MySQL存储引擎。
InnoDB特点:
- DML操作遵循ACID模型,支持事务;
- 行级锁,提高并发访问性能;
- 支持外键
FOREIGN KEY
约束,保证数据的完整性和正确性。
文件:
xxx.ibd
:xxx代表的是表名,InnoDB引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm
、sdi
)、数据和索引。
参数:innodb_file_per_table
当启用该选项时,InnoDB会为数据库中的每个表创建单独的表空间文件。每个表都存储在自己的.ibd文件中,而不是存储在共享的系统表空间中。
输入命令:
show variables like 'innodb_file_per_table';
结果演示:
我们来看一下idb文件中存放着什么,请看:
InnoDB中的逻辑存储结构如下:
- TableSpace:表空间
- Seqment:段
- Extent:区
- Page:页
- Row:行
三、MyISAM
MyISAM是MySQL中早期的默认存储引擎。
MyISAM特点:
- 不支持事务,不支持外键
- 支持表锁,不支持行锁
- 访问速度快
MyISAM存储引擎表在磁盘中所涉及到的文件有三个,请看:
- sdi文件存储的是表结构的信息。
- myd文件存储的是表中的数据。
- myi文件存储的是索引。
四、Memory
Memory存储引擎的表数据是存储在内容中的,所以会受到硬件问题、或者断电的影响,所以只能将这些表作为临时表或者缓存使用。
特点:
- 内存存放
- hash索引(默认)
文件:
- xxx.sid:存储表结构信息
- 没有索引文件和数据文件,因为数据都存放在内存中。
五、存储引擎选择
我们在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。
InnoDB
:是MySQL中默认的存储引擎,支持事务、外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包括很多的更新、删除操作,这时我们选择InnoDB存储引擎比较合适。- MyISAM:如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择MySIAM存储引擎是很合适的。比如日志、评论等。
- MEMORY:将所以的数据保存在内存中,访问速度快,通常用于临时表以及缓存。MEMORY的缺陷就是对表的大小有限制,太大的表无法存储在内存中(注意内存和磁盘是有所区别的,磁盘中存储几个G的数据完全可以,但是如果让内存中存储几个G的数据的代价是很大的),而且无法保障数据的安全。
好了,以上就是本文的全部内容了,就到这里吧,再见啦友友们!!!