?xml version="1.0" encoding="UTF-8"?
MySQL 有多种存储引擎:
可以看到, 有 InnoDB,Memory,MyISAM,CSV,Archive 等 9 种,
其中, Myisam 与 INNODB 是 MySQL 的两种比较重要的存储引擎, 两种引擎的存储方式不同, 导致性能不同, 比如锁的级别, 索引的使用等. 那本文就介绍下两种存储引擎的不同点.
一, MYISAM
先说下 ISAM. 索引顺序存取方法 (ISAM, Indexed Sequential Access Method) 最初是 http://zh.wikipedia.org/wiki/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 域存储相应记录主键的值而不是地址.
聚集索引这种实现方式使得按主键的搜索十分高效, 但是辅助索引搜索需要检索两遍索引: 首先检索辅助索引获得主键, 然后用主键到主索引中检索获得记录.
其特点如下:
来源: http://www.jianshu.com/p/aa228a8daf6a