Mysql架构与内部模块-第三章

接上文,本篇文章专门简述Mysql存储引擎,内容繁多,如果你只需知道每种存储引擎的适用场景,可以直接查看本文最后列出的适用场景部分。

 

正文:

Mysql存储引擎作为本系列文章中相对重要的一环,也是相关领域面试官问的比较多的一部分,能够掌握不同的存储引擎的区别,可以让你在工作中有更加突出的表现。

存储引擎首先其实它是一个进程,它能够决定你的数据的存储方式,管理方式,然后提供一些特性。

先带着一个问题进入后面的内容:Mysql为什么要设计如此多的存储引擎?

Mysql存储引擎是一种数据分布格式,从最直观的角度来讲,就是表文件在磁盘上的表现形式不同,文件个数不同,举个例子:

我们新建一张表:member_a,存储引擎选用InnoDB.

Mysql架构与内部模块-第三章

 

 

 然后我们查看member_a表在我们磁盘上的表现:

Mysql架构与内部模块-第三章

 

 

 包含两个文件:member_a.frm以及member_a.ibd ,其中frm文件为表元数据文件,比如表结构等相关信息,那么也就是说,不管你采用什么存储引擎

xxx.frm文件都是必要存在的,因为只要你是一张表,那么在你的磁盘上就会存在tableName.frm。

可以在你数据库发生意外损坏时使用此文件进行恢复,恢复方法我在后续有时间的话也会另开一篇文章进行详细说明各种存储类型的恢复。

ibd文件是存放InnoDB数据的文件,当然也包括索引,除此之外还可能存在一个后缀为.ibdata的文件,此文件和ibd文件相同,那么为什么InnoDB会存在两个不同类型的文件进行数据存储?

实际上InnoDB具有两种存储方式:共享表空间存储(ibdata),独立表空间存储(ibd) ,其可以通过配置来决定。

独立表空间(ibd)为一张表一个xx.ibd文件。

共享表空间(ibdata)可以设置为所有表共享一个或者多个ibdata文件。

共享表空间的相关设置,本文就不做赘述,感兴趣的朋友可以查阅相关资料。

 

然后我们再使用MyISAM存储引擎创建表:member_b,然后观察此表在磁盘上的结构:

Mysql架构与内部模块-第三章

 

 

 

Mysql架构与内部模块-第三章

 

 

 可以看到,除了必须存在的member_b.frm文件外,少了InnoDB引擎专有的xxx.ibd文件,多了MYD和MYI文件。

请注意这两个文件是MyISAM引擎的特有文件,MYD存放表数据,MYI文件存放索引等信息。

然后我们在新增一张使用MEMORY存储引擎的表:member_c:

Mysql架构与内部模块-第三章

 

 

 

Mysql架构与内部模块-第三章

 

 

 可以看到,数据目录下,member_c表只存在一个文件:member_c.frm。

以上举例了3种比较常见的Mysql存储引擎,在Mysql5.7以上的版本中,在创建表时,如果不指定表的存储引擎,那么默认为InnoDB引擎,下面将列出Mysql5.7全部的

存储引擎列表及详细说明

Mysql的存储引擎分为以下种类:

InnoDB存储引擎(5.7以上默认引擎)

MyISAM存储引擎

MEMORY存储引擎

CSV存储引擎

ARCHIVE存储引擎

BLACKHOLE存储引擎

MERGE存储引擎

FEDERATED存储引擎

EXAMPLE存储引擎

第三方存储引擎(社区或者如果你对C语言非常熟悉,你可以根据Mysql提供的接口规范,自己写上一个存储引擎,那你是非常牛逼的,从这个地方其实也可以看出来,为什么

我们的表在创建的时候指定了存储引擎,在后续还能够修改为不同的存储引擎,因为这些存储引擎都实现了同一套接口,跟JAVA为什么能够支持这么多数据库一样的道理,

因为都实现了JDK提供的接口。)

以上例举了Mysql目前支持的存储引擎,可以看到种类繁多,他们的运用场景也大不相同,下面我们聊聊每种存储引擎的不同:

InnoDB存储引擎

InnoDB是一款高性能和高可用兼并的通用存储引擎,在Mysql5.7以上,如果你在创建表时,不指定ENGINE为其他引擎,那么默认将创建一个InnoDB引擎的表,

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpywdx.html