1.存储引擎概念

1、概念引入:你现在有一份歌词,要保存下来,怎么保存?可以记在脑子里,写在纸上,记到电脑上。不论你放在哪里,不变的是数据,仅仅是存储格式的改变,engine引擎就是mysql存储数据的不同方式。就像一部电影,你可以用mp4,avi,rmvb多种格式来存储。

2.mysql数据库区别与其他数据库的一个重要特点,就是其插件式的表存储引擎。需要注意的是,存储引擎是基于表的,而不是数据库。

3.好处:每个存储引擎具有不同的特点,可以根据需要建立不同的存储引擎表。

4.分类:由于mysql数据库开源特性,存储引擎可分为mysql官方存储引擎和第三方存储引擎。

 

2.几种存储引擎简单介绍

1.InnoDB存储引擎

  InnoDB存储引擎支持事务,其设计目标主要是面向联机事务处理OLTP(OLTP)的应用,它是最为常用的一种引擎。

  • 特点是:支持行锁设计,支持外键,类似Oracle的非锁定读,即默认读取操作不会产生锁,从mysql5.5.8版本开始InnoDB是默认的存储引擎(之前是MyISAM)。
  • InnoDB使用多版本并发控制(MVCC)来获得高并发性,并且实现了SQL标准的4种隔离级别。
  • 对于表中数据的存储,InnoDB存储引擎采用了聚集的方式(即按照每张表的主键构造一颗B+树,同时叶子节点中存放的即为整张表的行记录数据),因此每张表的存储都是按主键的顺序来存储。如果没有显示的在表定义时指定主键,InnoDB存储引擎回味每一行生成6个字节的ROWID,并以此作为主键。

2.MyISAM存储引擎

  MyISAM存储引擎不支持事务,其设计目标是面向联机分析处理(OLAP)数据库应用,MyISAM存储引擎表是由MYD和MYI组成,MYD用来存放数据文件,MYI用来存放索引文件。

  • 特点是:支持表锁设计,支持全文索引。缓冲池只缓存索引文件,而不缓存数据文件,数据文件交由操作系统本身完成。
  • 在MYsql5.1.23版本之前,无论是32位还是64位操作系统环境下,缓存索引的缓冲池最大智能设置为4GB,在之后的版本中,64位系统可以支持大于4GB的索引缓冲池。
  • 在mysql5.0版本之前,MySQL默认支持的表大小为4GB,如果需要支持大于4GB的表,则需指定MAX_ROWS和AVG_ROW_LENGTH属性。从Mysql5.0版本开始,MYISAM默认支持256TB的表单数据,这足够满足一般需求。

3.NDB存储引擎

NDB存储引擎是一个集群存储引擎。

  • 特点是:数据全放在内存中(从Mysql5.1开始,可以将非索引数据放在磁盘上),因此主键查找速度很快,并且可以通过添加NDB数据存储节点可以线性的体改数据库性能,是高性能、高可用的集群系统。
  • 但是NDB存储引擎的连接操作是在Mysql数据库底层完成的,而不是存储引擎层,这就意味着复杂的连接操作,需要举的的网络开销,因此查询速度慢,如果解决了这个问题,NDB的市场应该是巨大的。

4.Memory存储引擎

Memory存储引擎(之前称HEAP存储引擎)将表中的数据存放在内存中,如果数据库重启或发生崩溃,表中的数据都将消失。

  • 特点:适合用于存储临时数据的临时表以及数据仓库中的维度表。mysql数据库使用Memory作为临时表,存储查询的中间结果集。
  • Memory存储引擎默认使用哈希索引,而不是我们熟悉的B+树索引。
  • 使用限制:(1)只支持表锁,并发性能较差;(2)不支持TEXT和BOLB列类型(3)当要存储变长字段(varchar)时,它也是按定长字段(char)来处理的,会浪费内存
  • 注意:如果中间结果集大于Memory存储引擎表的容量设置,又或者中间结果含有TEXT或BLOB列字段,Mysql数据库会自动将其转换为MyISAM存储引擎表存储到磁盘中。

5.Archieve存储引擎

Archieve存储引擎只支持INSERT和SELECT操作,从Mysql5.1之后开始支持索引,其设计目标主要是提供高速的插入和压缩功能,它使用zlib算法将数据航(row)进行压缩后存储,压缩比一般可达1:10。

  • 特点:适合存储归档数据,如日志信息。

 

附:几种存储引擎对比:

mysql执行器与存储引擎的关系_Memory