MySQL引擎简介以及InnoDB和MyISAM区别

如何选择合适的引擎?

Posted by     BY   杨晓明 on September 1, 2017

1.MySQL引擎

  MySQL(存储)引擎到底是什么呢?其实就是数据库如何存储数据、怎样建立索引以及如何查询更新数据等技术的实现方法,数据通过使用不同的技术存储在文件中,使用不同的存储机制、索引方式来提供不同的功能。   MySQL提供了很多种引擎:   MyISAMInnoDBMRG_MyISAMMEMORYCSVARCHIVEFEDERATED等等。
根据实际工作环境,应该选择不同的引擎。当然,我在工作中,最常用的是MyISAM引擎和InnoDB引擎。

查看MySQL支持的引擎:show engines;

2.MyISAM简介

MyISAM是MySQL5.5版之前的默认引擎,由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。

MyISAM类型的表强调的是性能,MyISAM表无法处理事务

MyISAM表是独立于操作系统的,这说明可以轻松地将其从Windows服务器移植到Linux服务器;每当我们建立一个MyISAM引擎的表时,就会在本地磁盘上建立三个文件,文件名就是表名。
例如,我建立了一个MyISAM引擎的tb_Demo表,那么就会生成以下三个文件:

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

MyISAM支持三种存储格式:

  • 静态表:默认存储格式,字段都是固定长度的。 优点:存储非常迅速,缓存也方便,同时出现故障也比较容易修复; 缺点:因为是固定长度,占用的空间比较大。

  • 动态表:记录不是固定长度。 优点:空间占用相对较少。 缺点:如果频繁地更新或删除记录会产生碎片,需要定时清理碎片,以及出现故障时修复困难。

  • 压缩表:每个记录单独被压缩,因此压缩表的话占据的磁盘空间更小了,非常小的访问开支。

3.InnoDB简介

InnoDB是一个健壮的事务型存储引擎,这种存储引擎已经被很多互联网公司使用,为用户操作非常大的数据存储提供了一个强大的解决方案。也是5.6版本之后的默认存储引擎。在我之前的工作中,InnoDB可以说是用的最多的。它主要有以下三个特点:

  1. InnoDB是唯一支持事务的引擎。
  2. InnoDB基于磁盘存储,并将记录按页的方式进行管理。
  3. InnoDB还引入了行级锁定和外键约束.

4.MYisam与InnoDB的对比选择

MyISAM存储引擎特别适合在以下几种情况下使用:

选择密集型的表:MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点。 插入密集型的表:MyISAM的并发插入特性允许同时选择和插入数据。例如:MyISAM存储引擎很适合管理邮件或Web服务器日志数据。

InnoDB存储引擎特别适合在以下场景中使用:

如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。 一般来说,如果需要事务支持,并且有较高的并发读取频率,InnoDB是理想的选择。

现在一般都是选用InnoDB了,主要是myisam的全表锁,读写串行问题,并发效率锁表,效率低myisam对于读写密集型应用一般是不会选用。