MySQL存储引擎

概述

存储引擎是什么?mysql

MySQL中的数据用各类不一样的技术存储在文件中,这些技术中的每一种技术都使用不一样的存储机制、索引技巧、锁定水平而且最终提供普遍的不一样的功能和能力。经过选择不一样的技术,额可以得到额外的速度或功能,改善应用功能。sql

存储引擎

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引擎的表中。blog

例如:同一种类的数据根据时间分为多张表存储,这时查询就会比较麻烦,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. 对索引和缓存的支持
相关文章
相关标签/搜索