分享

程序员应知应会之MySQL的存储引擎

 北欧模式 2022-06-19 发布于陕西

对于很多应用系统开发的程序员们,MySQL是非常熟悉的软件,但是很多人却对里面的存储引擎不是特别了解,只是单纯的采用默认的存储引擎,很少进行修改。今天我们就来看看各类存储引擎的区别,以便大家在使用MySQL的时候,知其然,还要知其所以然。

首先我们来看一下什么是存储引擎。

我们知道关系型数据库的数据是存在表里的,可以将表理解为由行和列组成的表格,类似于Excel的电子表格的形式,每个表格就是一个数据。但是在存储数据的同时,还要组织数据的存储结构,而这些数据的组织结构就是由存储引擎决定的。就好像同样是存储一些数据的Excel表,有的时候横向存储有的可能纵向存储,有的以序号排列,有的以字母排序一样。

现实生活中,由于不同业务产生了不同的数据,这些数据有的可能偏重于被频繁查询,有的要求增删速度快,有的则对事务、索引、外键有特殊规定。这样一来,就对存储数据的表要求使用不同的数据组织结构,也就是存储引擎。简而言之,就是业务直接决定了存储引擎。

所以,对于同一个数据库内的多个表,可以使用各自符合业务的存储引擎,即存储引擎的使用级别是数据表。

通常,我们可以使用Alter table 语句来更改表的存储引擎,例如以下的命令将表mytable 的存储引擎改为InnoDB

mysql> ALTER TABLE mytable ENGINE = InnoDB;

MySQL给开发者提供了查询存储引擎的功能,可以在命令行窗口使用:SHOW ENGINES来查看支持的存储引擎。

可以看到,这里面查出了9种存储引擎,支持其中的8种,其中InnoDB为默认存储引擎。

那么,各种存储引擎都有什么特点呢?我们来看一下。

MyISAM: 拥有较高的插入,查询速度,不支持事务,不支持外键约束,不支持行级锁,操作时需要锁定整张表,不过会保存表的行数,所以当执行select count(*) from tablename时执行特别快。用于管理非事务表,提供高速检索及全文检索能力,适用于有大量的select操作的表,如日志表

InnoDB 5.5版本后Mysql的默认数据库,事务型数据库的首选引擎,支持ACID事务,支持行级锁定是事务安全的,提供行级锁与外键约束,有缓冲池,用于缓冲数据和索引。适用于事务处理,具有ACID事物支持,应用于执行大量的insertupdate操作的表。

Memory :所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。每一个memory只实际对应一个磁盘文件。因为是存在内存中的,所以memory访问速度非常快,而且该引擎使用hash索引,可以一次定位,不需要像B树一样从根节点查找到支节点,所以精确查询时访问速度特别快,但是非精确查找时,比如like,这种范围查找,hash就起不到作用了。同时会占用和数据量成正比的内存空间。另外一旦服务关闭,表中的数据就会丢失,因为没有存到磁盘中。适用于内容变化不频繁的表,或者作为中间的查找表。对表的更新要谨慎因为数据没有被写入到磁盘中,服务关闭前要考虑好数据的存储。

Merge MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询在超大规模数据存储时很有用。构成一个MERGE数据表结构的各成员MyISAM数据表必须具有完全一样的结构。每一个成员数据表的数据列必须按照同样的顺序定义同样的名字和类型,索引也必须按照同样的顺序和同样的方式定义。

除了便于同时引用多个数据表而无需发出多条查询,MERGE数据表还可以用来创建一个尺寸超过各个MyISAM数据表所允许的最大长度逻辑单元

BDB: 源自Berkeley DB,事务型数据库的另一种选择,支持COMMITROLLBACK等其他事务特性

Archive Archive拥有高效的插入速度,但其对查询的支持相对较差非常适合存储大量的独立的,作为历史记录的数据。

Federated:将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。适合分布式应用

Cluster/NDB :高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用

CSV: 逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个.CSV文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV存储引擎不支持索引。

BlackHole :黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继。以及坑自己的同事。

performance_schema一个内存表引擎,这个存储引擎用于MySQL自带的PERFORMANCE_SCHEMA数据库,用于收集数据库服务器性能参数。用户自己不能创建存储引擎为PERFORMANCE_SCHEMA的表。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多