?xml version="1.0" encoding="UTF-8"?
mysql有多种存储引擎:
可以看到,有InnoDB、Memory、MyISAM、CSV、Archive等9种,
其中,Myisam与INNODB是mysql的两种比较重要的存储引擎,两种引擎的存储方式不同,导致性能不同,比如锁的级别、索引的使用等。那本文就介绍下两种存储引擎的不同点。
一、MYISAM
先说下ISAM。索引顺序存取方法(ISAM, Indexed Sequential Access Method)最初是IBM公司发展起来的一个文件系统,可以连续地(按照他们进入的顺序)或者任意地(根据索引)记录任何访问。
它的数据结构类似于B+树,树比较矮,查找起来IO少,比较快。
在Mysql-3.23版本使用了ISAM算法。索引的数据结构见B+树。
而MYISAM是mysql后期版本基于ISAM的优化,也是B+树为索引结构,MyISAM索引文件和数据文件是分离的。相比于ISAM,MYisam有可移植性更好、能处理更大的文件、更好的处理自增操作的优点。
其特点如下表:
可以看到锁的级别是表、不支持事务等特性。
二、Innodb
innodb也是以B+树作为索引结构的。但是有很大不同。
第一个不同:Innodb的索引文件和数据文件是一体的,数据文件本身就是索引结构的一部分。
叶节点包含了完整的数据记录。这种索引叫做聚集索引。因为InnoDB的数据文件本身要按主键聚集,所以Innodb要求表必须有主键(Mysiam可以没有)。
第二个与MyISAM索引的不同是InnoDB的辅助索引data域存储相应记录主键的值而不是地址。
聚集索引这种实现方式使得按主键的搜索十分高效,但是辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录.
其特点如下: