MySQL常用存储引擎介绍

MySQL常用存储引擎介绍

版权申明:本文为原创文章,转载请注明原文出处

原文链接:https://blog.it-follower.com/posts/1743848565.html

存储引擎是数据库用来创建、读取、更新数据的软件模块。MySQL中的数据用各种不同的技术存储中系统文件或者内存中。这些技术都使用的不同的存储机制、索引算法、加锁机制。通过选择不同的存储引擎,你能够获得额外的访问速度和功能,从而改善应用的整体性能。

MyISAM

MyISAM存储引擎不支持事务,也不支持外键。在物理存储上,具备顺序性,因此它的访问速度快,在对事务完整性没有要求或者以select、insert为主的应用,推荐使用MyISAM作为你的存储引擎来建表,例如系统日志表等。对于每张表,MyISAM在磁盘上存储成3个文件,文件名就是表名,扩展名分别为:

  • .frm – 存储表定义
  • MYD – MYData,存储具体数据
  • MYI – MYIndex,存储索引

InnoDB

InnoDB是一个健壮的事务型存储引擎,也是MySQL 5.5以后版本的默认存储引擎,目前使用得最为广泛。它为用户操作非常大的数据存储提供了一个强大的解决方案,InnoDB还引入了行级锁和外键约束,在一下场合中,推荐使用InnoDB最为你的存储引擎:

  • 更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求
  • 事务。InnoDB存储引擎时支持事务的标准MySQL存储引擎
  • 自动灾难恢复。与其他存储引擎不同,InnoDB能够自动从灾难中恢复
  • 外键约束。MySQL中支持外键的存储引擎只有InnoDB
  • 支持自增列AUTO_INCREMENT属性

MEMORY

使用MEMORY存储引擎的目的就是追求速度。为得到最快的响应时间,采用的逻辑存储介质是内存。虽然在内存中存储表数据确实会提供很高的性能,但是如果MySQL出现了宕机,所有内存中的数据都会丢失。另外,MEMORY要求数据表里的数据使用的是长度不变的格式,这意味着不能使用BLOB和TEXT这样的可变长度的数据类型,VARCHAR是一种长度可变的类型,但是它在MySQL内部当做长度固定不变的CHAR类型,所有可以使用。一般一下几种情况可以使用MEMORY存储引擎:

  • 目标数据较小,而且被非常频繁的访问
  • 如果数据是临时的,而且要求必须立即可用,那么就可以存放在内存表中
  • 业务上允许存储在MEMORY表中的数据如果突然丢失

MERGE

MERGE存储引擎是一组MyISAM表的组合,这些MyISAM表结构必须完全相同,尽管其使用不如其它引擎突出,但是在某些情况下非常有用。说白了,Merge表就是几个相同MyISAM表的聚合器;Merge表中并没有数据,对Merge类型的表可以进行查询、更新、删除操作,这些操作实际上是对内部的MyISAM表进行操作。Merge存储引擎的使用场景。

对于服务器日志这种信息,一般常用的存储策略是将数据分成很多表,每个名称与特定的时间端相关。例如:可以用12个相同的表来存储服务器日志数据,每个表用对应各个月份的名字来命名。当有必要基于所有12个日志表的数据来生成报表,这意味着需要编写并更新多表查询,以反映这些表中的信息。与其编写这些可能出现错误的查询,不如将这些表合并起来使用一条查询,之后再删除Merge表,而不影响原来的数据,删除Merge表只是删除Merge表的定义,对内部的表没有任何影响。

ARCHIVE

Archive是归档的意思,在归档之后很多的高级功能就不再支持了,仅仅支持最基本的插入和查询两种功能。在MySQL 5.5版以前,Archive是不支持索引,但是在MySQL 5.5以后的版本中就开始支持索引了。Archive拥有很好的压缩机制,它使用zlib压缩库,在记录被请求时会实时压缩,所以它经常被用来当做仓库使用。

总结

这篇文章总结了几种比较常用的存储引擎,对于实际的工作,需要根据具体的情况而定,结合实际的项目实例进行应用,才是最好的学习方法。

评论