MySQL存储引擎

概述

存储引擎是什么?

MySQL中的数据用各种不同的技术存储在文件中,这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,额能够获得额外的速度或功能,改善应用功能。

存储引擎

1.InnoDB

InnoDB是一个健壮的事务性存储引擎,有行级锁定和外键约束,适用于以下场合:

  1. 更新密集的表。InnoDB存储引擎适合处理多重并发的更新请求。
  2. 事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。
  3. 自动灾难恢复。与其他存储引擎不同,InnoDB表能够自动从灾难中恢复。
  4. 外键约束。MYSQL支持外键的存储引擎只用InnoDB。
  5. 支持自动增长列auto_increment属性。

另外,从MySQL5.7开始InnoDB就成为默认的存储引擎。

2.MyISAM

MyISAM表是独立于操作系统的,这说明可以轻松的将其从Windows服务器移植到Linux服务器。每当简历一个MyISAM引擎的表时,就会创建三个文件,文件名是表名,三个文件如下:

  • db_name.frm: 存储表定义
  • db_name.MYD: 存储数据
  • db_name.MYI: 存储索引

MyISAM引擎不支持事务操作(当然,可以在service层根据自己的业务需求进行相应的控制),MyISQM存储引擎适合在以下情况使用:

  1. 选择密集型的表。MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点
  2. 插入密集型的表。MyISAM的兵法插入特性允许同时选择和插入书数据。

3.MRG_MyISAM

MRG_MyISAM存储引擎是一组MyISAM表的组合,也就是说它将MyISAM引擎的多个表聚合起来,但是它内部没有数据,真正的数据依然在MyISAM引擎的表中。

例如:同一种类的数据根据时间分为多张表存储,这时查询就会比较麻烦,MRG_MyISAM引擎可以直接将多个表聚合成一个表统一查询。

4.MEMORY

Memory存储引擎的出发点是速度。为了得到最快的响应时间,采用的存储介质是系统内存。虽然在内存中存储表数据回提供很高的性能,但当mysqld守护进程崩溃时,所有的Memory数据都会丢失。另外,它要求存储在数据表中的数据使用的是长度不变的格式,这意味着不能使用blob和text这样的长度可变的数据类型,varchar是一种长度可变的类型,但因为它在MySQL内部当作长度固定不变的char类型,所以可以使用。

使用Mymory存储引擎的场景:

  1. 目标数据较小,而且被经常频繁的访问。在内存中存放数据,过太大的数据可能造成内存溢出,可以通过参数max_heap_table_size控制Memory表的大小,限制表的最大大小。
  2. 如果数据是临时的,而且要求必须立即可用,那么可以放在内存中。
  3. 存储在Memory表中的数据如果突然丢失,不会对服务器产生实质的负面影响。

5.CSV

csv存储引擎是csv格式文件存储数据。

  • 可以将csv文件作为MySQL的表使用,但是不支持索引,不支持分区。
  • 因为csv文件格式的原因,所有的字段必须非空。
  • 其中的每个数据行占用一个文本行。

因为csv文件可以被Office等软件直接编辑,可能会出现不规则的情况,若出现csv文件中内容损坏的情况,可以使用check table或repair table名零零检查和修复。

6.ARCHIVE

archive是归档的意思,仅仅支持插入和查询两种操作,在MySQL5.5以后支持索引功能,有很好的压缩机制,在记录请求时进行实时压缩,所以经常被当作仓库来使用。适合存储大量的独立的作为历史纪录的数据,拥有很高的插入速度但是对查询的支持比较差。

7.BLACKHOLE

黑洞存储引擎,所有插入的数据不会保存,boackhole引擎表永远保持为空。服务器会记录下Blackhole表的日志,所以可以用于复制数据到备份数据库。

8.PERFORMANCE_SCHEMA

主要用于收集数据库服务器的性能参数。MySQL用户不能创建存储引擎为PERFORMANCE_SCHEMA的表。

他提供了以下的功能:

  • 提供进程等待的详细信息,包括锁、互斥变量、文件信息。
  • 保存历史的事件汇总信息,为Mysql服务器的性能做出详细的判断。
  • 对于新增和删除监控时间点都非常容易,并可以随意的改变Mysql服务器的监控周期

9.其他

当然还有其它一些存储引擎,如FEDERATED、OQGraph、SphinxSE、TokuDB、Cassandra、CONNECT、SQUENCE等。

常用引擎对比

不同的存储引擎有各自的特点,根据实际情况选择合适的存储引擎,其对比如下图所示:

MySQL存储引擎

MySQL操作

查看支持的存储引擎:

show engines;

show engines\G;

查看mysql存储引擎系统变量:

MySQL存储引擎

修改数据库引擎:

方式一:

修改配置文件my.ini,在[mysqld]后面添加default-storage-engine=InnoDB,重启服务,将数据库默认引擎修改为InnoDB。

MySQL存储引擎

方式二:

在建表是指定存储引擎:

MySQL存储引擎

指定test表的存储引擎为MyISAM。

方式三:

建表后更改:

MySQL存储引擎

更改该表的存储引擎为InnoDB。

查看表使用的存储引擎:

MySQL存储引擎


该如何选择合适的存储引擎呢?提供以下几个选择的标准,实际情况灵活选择:

  1. 是否需要支持事务
  2. 是否需要使用热备
  3. 崩溃恢复,能否接收崩溃
  4. 是否需要外键支持
  5. 存储的限制
  6. 对索引和缓存的支持


分享到:


相關文章: