【MySQL进阶】--- 存储引擎的介绍

个人主页:兜里有颗棉花糖
欢迎 点赞 收藏✨ 留言✉ 加关注本文由 兜里有颗棉花糖 原创
收录于专栏【MySQL学习专栏】
本专栏旨在分享学习MySQL的一点学习心得,欢迎大家在评论区讨论
在这里插入图片描述

目录

  • 一、什么是存储引擎
  • 二、InnoDB
  • 三、MyISAM
  • 四、Memory
  • 五、存储引擎选择

一、什么是存储引擎

概念:存储引擎作为MySQL中的核心部分,它是MySQL数据库中建立索引、更新/查询数据等技术的实现方式(不同的存储引擎建立索引、更新/查询数据的机制是不同的)。另外,存储引擎是基于数据库表的而不是基于数据库的,即一个数据库的多张表是可以选择不同存储引擎的,故存储引擎也被称之为表类型

我们通过建表语句来看一下存储引擎:
【MySQL进阶】--- 存储引擎的介绍_第1张图片

创建表的时候,我们是可以指定存储引擎的,如果不指定的话,默认的存储引擎就是InnoDB。

语法1:创建表时,要指定存储引擎,语法格式如下:

create table 表名(
	字段1 字段1类型 [comment 字段1注释],
	...
	字段n 字段n类型 [comment 字段n注释]
) engine = innodb [comment 表注释];

语法2:查看当前数据库支持的存储引擎
语法格式show engines;
执行结果如下:
【MySQL进阶】--- 存储引擎的介绍_第2张图片

二、InnoDB

概念:InnoDB时一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之后,InnoDB是默认的MySQL存储引擎。

InnoDB特点:

  • DML操作遵循ACID模型,支持事务
  • 行级锁,提高并发访问性能;
  • 支持外键FOREIGN KEY约束,保证数据的完整性和正确性。

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

当启用该选项时,InnoDB会为数据库中的每个表创建单独的表空间文件。每个表都存储在自己的.ibd文件中,而不是存储在共享的系统表空间中。

输入命令:show variables like 'innodb_file_per_table';
结果演示:
【MySQL进阶】--- 存储引擎的介绍_第3张图片

【MySQL进阶】--- 存储引擎的介绍_第4张图片

我们来看一下idb文件中存放着什么,请看:
【MySQL进阶】--- 存储引擎的介绍_第5张图片

InnoDB中的逻辑存储结构如下:

  • TableSpace:表空间
  • Seqment:段
  • Extent:区
  • Page:页
  • Row:行
    【MySQL进阶】--- 存储引擎的介绍_第6张图片

三、MyISAM

MyISAM是MySQL中早期的默认存储引擎。

MyISAM特点:

  • 不支持事务,不支持外键
  • 支持表锁,不支持行锁
  • 访问速度快

MyISAM存储引擎表在磁盘中所涉及到的文件有三个,请看:
【MySQL进阶】--- 存储引擎的介绍_第7张图片

  • sdi文件存储的是表结构的信息。
  • myd文件存储的是表中的数据。
  • myi文件存储的是索引。

四、Memory

Memory存储引擎的表数据是存储在内容中的,所以会受到硬件问题、或者断电的影响,所以只能将这些表作为临时表或者缓存使用。

特点:

  • 内存存放
  • hash索引(默认)

文件:

  • xxx.sid:存储表结构信息
  • 没有索引文件和数据文件,因为数据都存放在内存中。

【MySQL进阶】--- 存储引擎的介绍_第8张图片

五、存储引擎选择

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

  • InnoDB:是MySQL中默认的存储引擎,支持事务、外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包括很多的更新、删除操作,这时我们选择InnoDB存储引擎比较合适。
  • MyISAM:如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择MySIAM存储引擎是很合适的。比如日志、评论等。
  • MEMORY:将所以的数据保存在内存中,访问速度快,通常用于临时表以及缓存。MEMORY的缺陷就是对表的大小有限制,太大的表无法存储在内存中(注意内存和磁盘是有所区别的,磁盘中存储几个G的数据完全可以,但是如果让内存中存储几个G的数据的代价是很大的),而且无法保障数据的安全。

好了,以上就是本文的全部内容了,就到这里吧,再见啦友友们!!!

你可能感兴趣的:(MySQL从入门到精通系列专栏,mysql,数据库)