2 MySQL 数据库引擎简介
2.1ISAM(Indexed Sequential Access Method) ISAM 是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数 据库被查询的次数要远大于更新的次数。因此,ISAM 执行读取操作的速度很快,而且不占 用大量的内存和存储资源。ISAM 的两个主要不足之处在于,它不支持事务处理,也不能够 容错。如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把 ISAM 用在关键任 务应用程序里,那就必须经常备份你所有的实时数据,通过其复制特性,MYSQL 能够支持 这样的备份应用程序。 注意:使用 ISAM 注意点:必须经常备份所有实时数据。
2.2MyISAM MyISAM 是 MySQL 的 ISAM 扩展格式(MySQL5.5 之前版本的缺省数据库引擎)数据库 引擎。除了提供 ISAM 里所没有的索引和字段管理的大量功能,MyISAM 还使用一种表格锁 定的机制,来优化多个并发的读写操作,其代价是你需要经常运行 OPTIMIZE TABLE 命令, 来恢复被更新机制所浪费的空间。MyISAM 还有一些有用的扩展,例如用来修复数据库文件 的 MyISAMCHK 工具和用来恢复浪费空间的 MyISAMPACK 工具。MYISAM 强调了快速读取操 作,这可能就是为什么 MySQL 受到了 WEB 开发如此青睐的主要原因:在 WEB 开发中你所 进行的大量数据操作都是读取操作。所以,大多数虚拟主机提供商和 INTERNET 平台提供商 只允许使用 MYISAM 格式。MyISAM 格式的一个重要缺陷就是不能在表损坏后恢复数据。 MyISAM 引擎使用注意:必须经常使用 Optimize Table 命令清理空间;必须经常备份所 有实时数据。工具有用来修复数据库文件的 MyISAMCHK 工具和用来恢复浪费空间的 MyISAMPACK 工具。不支持事务。数据越多,写操作效率越低。因为要维护数据和索引信息。 (索引列越多,相对效率月底。) 如果使用该数据库引擎,会生成三个文件: .frm:表结构信息 .MYD:数据文件 .MYI:表的索引信息
2.3InnoDB InnoDB 数据库引擎都是造就 MySQL 灵活性的技术的直接产品,这项技术就是 MYSQL++ API。在使用 MYSQL 的时候,你所面对的每一个挑战几乎都源于 ISAM 和 MyISAM 数据库引 擎不支持事务处理(transaction process)也不支持外键。尽管要比 ISAM 和 MyISAM 引擎慢 很多,但是 InnoDB 包括了对事务处理和外来键的支持,这两点都是前两个引擎所没有的。 是现在的 MySQL(5.5 以上版本)常用版本默认引擎 MySQL 官方对 InnoDB 是这样解释的:InnoDB 给 MySQL 提供了具有提交、回滚和崩 溃恢复能力的事务安全(ACID 兼容)存储引擎。InnoDB 锁定在行级并且也在 SELECT 语句提 供一个 Oracle 风格一致的非锁定读,这些特色增加了多用户部署的性能。没有在 InnoDB 中 扩大锁定的需要,因为在 InnoDB 中行级锁定适合非常小的空间。InnoDB 也支持 FOREIGN KEY 强制。在 SQL 查询中,你可以自由地将 InnoDB 类型的表与其它 MySQL 的表的类型混合起来, 甚至在同一个查询中也可以混合。 InnoDB 是为处理巨大数据量时的最大性能设计,它的 CPU 效率可能是任何其它基于 磁盘的关系数据库引擎所不能匹敌的。 InnoDB 存储引擎被完全与 MySQL 服务器整合,InnoDB 存储引擎为在主内存中缓存数据 和索引而维持它自己的缓冲池。InnoDB 存储它的表&索引在一个表空间中,表空间可以包 含数个文件(或原始磁盘分区)。这与 MyISAM 表不同,比如在 MyISAM 表中每个表被存在 分离的文件中。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制为 2GB 的操作系统上。 在 MySQL5.7 版本中,InnoDB 存储引擎管理的数据文件为两个:分别是 frm,idb 文件。 InnoDB 特点: 1)、支持事务 2)、数据多版本读取(InnoDB+MyISAM+ISAM) 3)、锁定机制的改进 4)、实现外键 2.3.1 innodb 与 myisam 区别 1. InnoDB 支持事务,MyISAM 不支持,对于 InnoDB 每一条 SQL 语言都默认封装成事务, 自动提交,这样会影响速度,所以最好把多条 SQL 语言放在 begin transaction 和 commit 之 间,组成一个事务; 2. InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会 失败; 3. InnoDB 是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引 效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此, 主键不应该过大,因为主键太大,其他索引也都会很大。而 MyISAM 是非聚集索引,数据文 件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。 4. InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而 MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很 快; 5. Innodb 不支持全文索引,而 MyISAM 支持全文索引,查询效率上 MyISAM 要高; 2.3.2 如何选择 1. 是否要支持事务,如果要请选择 innodb,如果不需要可以考虑 MyISAM 2. 如果表中绝大多数都只是读查询,可以考虑 MyISAM,如果既有读写也挺频繁,请使 用 InnoDB。 3. 系统崩溃后,MyISAM 恢复起来更困难,能否接受; 4. MySQL5.5 版本开始 Innodb 已经成为 Mysql 的默认引擎(之前是 MyISAM),说明其优势 是有目共睹的,如果你不知道用什么,那就用 InnoDB,至少不会差。
2.4Memory 存储引擎 Memory 存储引擎,通过名字就很容易让人知道,他是一个将数据存储在内存中的存储 引擎。Memory 存储引擎不会将任何数据存放到磁盘上,仅仅存放了一个表结构相关信息 的.frm 文件在磁盘上面。所以一旦 MySQLCrash 或者主机 Crash 之后,Memory 的表就只剩下 一个结构了。Memory 表支持索引,并且同时支持 Hash 和 B-Tree 两种格式的索引。由于是 存放在内存中,所以 Memory 都是按照定长的空间来存储数据的,而且不支持 BLOB 和 TEXT 类型的字段。Memory 存储引擎实现页级锁定。
2.5NDBCluster 存储引擎 NDB存储引擎也叫NDBCluster存储引擎,主要用于 MySQLCluster分布式集群环境,Cluster 是 MySQL 从 5.0 版本才开始提供的新功能。
2.6Merge 存储引擎 MERGE 存储引擎,在 MySQL 用户手册中也提到了,也被大家认识为 MRG_MyISAM 引擎。 Why?因为 MERGE 存储引擎可以简单的理解为其功能就是实现了对结构相同的 MyISAM 表, 通过一些特殊的包装对外提供一个单一的访问入口,以达到减小应用的复杂度的目的。要创 建 MERGE 表,不仅仅基表的结构要完全一致,包括字段的顺序,基表的索引也必须完全一 致。BDB 存储引擎 BDB 存储引擎全称为 BerkeleyDB 存储引擎,和 Innodb 一样,也不是 MySQL 自己开发实 现的一个存储引擎,而是由 SleepycatSoftware 所提供,当然,也是开源存储引擎,同样支持 事务安全。
2.7FEDERATED 存储引擎 FEDERATED 存储引擎所实现的功能,和 Oracle 的 DBLINK 基本相似,主要用来提供对远 程 MySQL 服务器上面的数据的访问接口。如果我们使用源码编译来安装 MySQL,那么必须 手工指定启用 FEDERATED 存储引擎才行,因为 MySQL 默认是不起用该存储引擎的。
2.8ARCHIVE 存储引擎 ARCHIVE 存储引擎主要用于通过较小的存储空间来存放过期的很少访问的历史数据。 ARCHIVE 表不支持索引,通过一个.frm 的结构定义文件,一个.ARZ 的数据压缩文件还有一 个.ARM 的 meta 信息文件。由于其所存放的数据的特殊性,ARCHIVE 表不支持删除,修改操 作,仅支持插入和查询操作。锁定机制为行级锁定。
2.9BLACKHOLE 存储引擎 BLACKHOLE 存储引擎是一个非常有意思的存储引擎,功能恰如其名,就是一个“黑洞”。 就像我们 unix 系统下面的“/dev/null”设备一样,不管我们写入任何信息,都是有去无回。 2.10CSV 存储引擎 CSV 存储引擎实际上操作的就是一个标准的 CSV 文件,他不支持索引。起主要用途就是 大家有些时候可能会需要通过数据库中的数据导出成一份报表文件,而 CSV 文件是很多软件 都支持的一种较为标准的格式,所以我们可以通过先在数据库中建立一张 CSV 表,然后将生 成的报表信息插入到该表,即可得到一份 CSV 报表文件了。
3 存储引擎管理
3.1查看数据库支持的存储引擎 show engines
3.2查看数据库当前使用的存储引擎 就是默认引擎是什么。 show variables like '%storage_engine%' 也可以在 MySQL 配置文件中查看。 windows - my.ini。 Linux - my.cnf
3.3查看数据库表所用的存储引擎 show create table table_name
3.4创建表指定存储引擎 create table table_name (column_name column_type) engine = engine_name
3.5修改表的存储引擎 alter table table_name engine=engine_name
3.6修改默认的存储引擎 在 MySQL 配置文件中修改下述内容: default-storage-engine=INNODB MySQL 配置文件: windows 系 统 - MySQL 安 装目 录 /my.ini (5.7 版 本 my.ini 文 件在 数 据目 录 中。 C:/programdata/MySQL Server 5.7/mysql/) linux 系统 - /etc/my.cnf