MyISAM 存储引擎是MySQL 默认的存储引擎,也是目前MySQL 使用最为广泛的存储引擎之一。
存储引擎是需要在MySQL 安装的时候就必须和MySQL 一起被编译并同时被安装的。
MySQL 的插件式存储引擎主要包括MyISAM,Innodb,NDB Cluster,Maria,Falcon,Memory
,Archive,Merge,Federated 等,其中最著名而且使用最为广泛的MyISAM 和Innodb两种存储
引擎。
MyISAM 存储引擎简介
每一个表都被存放为三个以表名命名的物理文件。存放表结构定义信息的.frm 文件,另外还
有.MYD和.MYI 文件,分别存放了表的数据(.MYD)和索引数据(.MYI)
Innodb 存储引擎简介
Innodb 之所以能如此受宠,主要是在于其功能方面的较多特点:
1、支持事务安装
2、数据多版本读取
3、锁定机制的改进
4、实现外键
Innodb 的物理结构分为两大部分:
1、数据文件(表数据和索引数据)
2、日志文件
选择正确的存储引擎
当设计基于MySQL的应用时,你应该首先决定利用哪种存储引擎来存储你的数据。如果你不在设计阶段考虑这个问题,你极有可能在后面的开发中面临复杂的情况。你很可能发现默认的存储引擎并没有提供你需要的一个特性,比如事务,或者你需要比MyISAM的表锁定更细粒度的读写锁定。
因为你可以在表级别来选择存储引擎,因此你需要对如何使用每个表以及每个表中存的数据有一个清楚的认识。它不仅可以帮助你对于整个应用有一个比较好的整体理解,同时也可以对它的增长规模有一个估计。借助于这些信息,你可开始决定利用哪些存储引擎来完成这些任务了。
注:对于不同的表使用不同的存储引擎并不是很必要。如果你可以为所有的表使用同一个存储引擎来完成既定的任务,那么你将会发现你后面的工作要简单很多。
存储引擎选择的考查点
尽管许多因素都可以对存储引擎的选择造成影响,它通常还是可以归结为一些很基本的考查点。下面列出就是一些主要的考查点:
事务
如果你的需要事务,那么InnoDB是最稳定、并且集成度比较好的经过验证的选择。但是随着时间的推进,我们也将会看到许多更有竞争力的事务型引擎出现。如果不需要事务,而只是执行一些基本的查询和插入操作的话,MyISAM是一个比较好的选择。有时一个应用的一些特定的组件(比如日志)可能会归入这类应用。
并发
开发性需求的最好的衡量标准是你的工作量。如果你只量需要插入和写操作的并发性的话,不管你相信不相信,MyISAM是一个很不错的选择。如果你需要许多操作混合执行而互不影响的话,一个支持行锁的引擎将会是比较不错的选择。
备份
对于常规备份的需求也可能成为影响你的表选择的一个因素。如果你的服务器可以定时的关闭来备份的话,所有的存储引擎在处理上基本都差不多。但是如果你需要执行一个线上备份的话,选择就不是那么清晰了。第11章将会针对这个话题进行更详细的描述。但是需要记住一点,如果选用了多种存储引擎的话,将会增大备份和服务器调优的复杂性。
故障恢复
如果你有很多的数据,你需要很严肃地考虑它需要多久从一个故障中恢复。MyISAM表相对于InnoDB表来说,一般更容易损坏,并且需要花更多的时间来恢复。事实上这是为什么很多在即使不需要事务的时候也仍然选择InnoDB的原因。
特殊功能
最后,你有时可能会发现一个应用依赖于一些特定的功能或者优化,而这些优化可能只有一些MySQL的存储引擎提供。比如,许多应用依赖于簇索引的优化。在这个时候,你的选择就只有InnoDB和solidDB了。另一方面来说,只有MyISAM支持全文检索。如果一个存储引擎只符合其中的一些条件,而不符合其他的,你就需要妥协或者找到一个更聪明的设计方案了。你可能会经常遇到一种存储引擎只符合你的众多需求中的一些的情况