存储引擎是数据库的核心。对于mysql,存储引擎以插件的形式运行。虽然mysql支持的存储引擎种类繁多,但常用的只有那么几种。本文主要是做一个总结和比较。一、介绍mysql5以后,支持的存储引擎有十几种,但常用的就那么几种,InnoDB也是默认支持的。既然要比较,就得从不同的维度来看。我们可以通过命令查看当前数据库可以支持哪些存储引擎。这里我们发现默认支持9个。还是有很多的,下面我们来做个对比。不同的存储引擎各有特点,以适应不同的需求,如表所示。要做出选择,首先要考虑每个存储引擎提供的不同功能。在这里,我们列出一些功能并进行比较。让我们详细分析和比较它们。二、存储引擎1、MyISAM就是使用这个存储引擎,每个MyISAM在磁盘上存储三个文件。(1)frm文件:存储表定义数据(2)MYD文件:存储表具体记录数据(3)MYI文件:存储索引frm和MYI可以存放在不同目录下。MYI文件是用来存储索引的,只是保存了记录所在页的指针,索引的结构是B+树结构。下图是MYI文件存储的机制:从这张图可以看出,存储引擎是通过MYI的B+树结构查找记录页,然后根据记录页查找记录。支持全文索引、B树索引和数据压缩。支持的数据也分为三种:(1)静态定长表这种方式的优点是存储速度很快,容易缓存,表损坏后容易修复。缺点是占用空间。这也是默认的存储格式。(2)动态变长表的优点是节省空间,但一旦出错恢复起来比较麻烦。(3)上面说的压缩表是支持数??据压缩的,说明这个格式也必须支持。当数据文件出现错误时,可以使用查表工具进行检查,也可以使用修复表工具进行恢复。一个重要的特点是它不支持事务,但这也意味着它的存储速度更快。如果你的读写操作允许错误的数据,你可以选择这个存储引擎只是为了速度。2.InnoDBInnoDB是默认的数据库存储引擎。它的主要特点是:(1)可以通过auto_increment自动增加列。(二)支持事务。默认的事务隔离级别是可重复性,这是通过MVCC(ConcurrentVersionControl)实现的。(3)使用的锁粒度为行级锁,可以支持更高的并发;(4)支持外键约束;外键约束实际上降低了表的查询速度,反而增加了表之间的耦合。(5)配合一些热备份工具,支持在线热备份;(6)InnoDB中有缓冲管理,通过缓冲池,缓存所有的索引和数据,以加快查询速度;(7)对于InnoDB表,其数据的物理组织是聚簇表。所有数据都按主键组织。数据和索引放在一起,都位于B+号的叶子节点上;当然,InnoDB还有以下两种存储表和索引的形式:(1)使用共享表空间存储:所有的表和索引都存储在同一个表空间中。(2)使用多表空间存储:表结构放在frm文件中,数据和索引放在IBD文件中。对于分区表,每个分区对应一个独立的IBD文件。分区表的定义可以参考我的其他文章。使用分区表的好处是可以提高查询效率。对于InnoDB来说,最大的特点就是支持事务。但这是以牺牲效率为代价的。3.内存在内存中存储数据。为了提高数据访问速度,每个表实际上关联了一个磁盘文件。该文件是frm.(1)支持的数据类型有限,例如:不支持TEXT和BLOB类型,对于string类型数据,只支持定长行,VARCHAR会自动存储为CHAR类型;(2)支持的锁粒度为表级锁。因此,当访问量比较大时,表级锁会成为MEMORY存储引擎的瓶颈;(3)由于数据保存在内存中,一旦服务器出现故障,数据就会丢失;(4)查询的时候,如果是有用的临时表,临时表中有BLOB和TEXT类型的字段,那么这个临时表会被转换成MyISAM类型的表,性能会急剧下降;(5)默认使用hash索引。(6)如果内部表很大,则将其转换为磁盘表。这里只介绍三种常见的存储引擎。使用哪种引擎需要灵活选择。一个数据库中的多个表可以使用不同的引擎来满足各种性能和实际需求。使用合适的存储引擎会提升整个数据库的性能
