MySQL存储引擎简介

2017-03-17  本文已影响228人  丁木木木木木

主要内容:

存储引擎到底是什么呢?其实就是数据库如何存储数据、怎样建立索引以及如何查询更新数据等技术的实现方法,数据通过使用不同的技术存储在文件中,使用不同的存储机制、索引方式来提供不同的功能。MySQL存储引擎可以通过以下命令查询,我的MySQL版本是5.7.17,默认存储引擎是InnoDB。

mysql> show engines;

各存储引擎比较

(☑️表示支持,✖️表示不支持)

| 存储引擎 | MyISAM | InnoDB| Memory |Merge|
| ------------- |-------------|---------|---------|
| 存储限制|无|64TB|有|无|
| 锁机制|表锁|行锁|表锁|表锁|
| 事务支持|✖️|☑️|✖️|✖️|
| 外键约束|✖️|☑️|✖️|✖️|
| B树索引|☑️|☑️|☑️|☑️|
| 哈希索引|✖️|✖️|☑️|✖️|
| 全文索引|☑️|✖️|✖️|✖️|

MyISAM

特点

存储格式

建立MyISAM引擎的表时,会在本地磁盘上创建三个文件,文件名为表名。例如创建了XXX表,会生成三个文件:XXX.frm存储表定义、XXX.MYD存储数据和XXX.MYI存储索引
举个例子,我在engine_test数据库下新建了一个MyISAM存储引擎的数据表。

创建MyISAM存储引擎的数据表
然后进入到my.cnf配置文件配置的datadir目录下,我这边配置的是/usr/local/Cellar/mysql/5.7.17/data,会发现许多文件夹其实对应的是数据库。进入到数据库文件夹后,发现了对应的三个文件。
测试MyISAM引擎表创建后生成的文件
同时MyISAM支持三种存储格式。 myisam存储引擎静态表存储缺点.png

适合场合

InnoDB

健壮的事务型存储引擎。

特点

存储格式

默认存储引擎为InnoDB,所以不设置引擎。


创建InnoDB存储引擎的数据表

发现生成了两个文件。


测试InnoDB引擎表创建后生成的文件.png

适合场合

MRG_MYISAM

特点

顾名思义,mrg_myisam其实是一组MyISAM表的集合,这些MyISAM表结构相同。其实这个引擎中merge后的表其实是各个MyISAM表的聚合,对合并后表的查询、更新其实是对各个分表的操作,对合并表的删除操作只是删除它的定义,对内部分表是没有影响的。

适合场合

Memory

特点

Memory引擎使用存在于内存中的内容来创建表,主要目的是为了得到最快的响应时间。每个Memory表只对应一个磁盘文件XXX.frm。使用这个引擎的表数据访问非常快,因为数据存储在内存中,并且默认使用Hash索引。但也因为这点,如果数据库崩溃了,所有的数据将会丢失。而且要求存储在Memory数据表里的数据格式是固定长度的。

适合场合

CSV

用过Excel的同学应该都知道CSV格式,而CSV存储引擎是基于CSV格式文件来存储数据的。

ARCHIVE

Archive是归档的意思,仅仅支持插入和查询基本功能,很多高级功能都不支持了。拥有很好的压缩机制,记录被请求时实时地进行压缩,所以经常被当作仓库来使用。

BlackHole

黑洞存储引擎,所有插入的数据并不会保存,这个存储引擎表永远保持为空。

上一篇下一篇

猜你喜欢

热点阅读