MySQL 被广泛地应用在 Internet 上的中小型网站中. 由于其体积小, 速度快, 总体拥有成本低, 尤其是开放源码这一特点, 一般中小型网站的开发都选择 MySQL 作为网站的数据库. 存储引擎是 MySQL 数据库的重要组成部分之一, 也是在不同应用场景下, 对 MySQL 数据库进行设置的重要考察点之一. 本文将介绍 MySQL 数据库几种存储引擎的功能和特性.
MySQL 存储引擎
InnoDB 存储引擎: 是面向 OLTP(Online Transaction Processing), 行锁, 支持外键, 非锁定读, MySQL-4.1 开始支持每个 InnoDB 引擎的表单独放倒一个表空间里. InnoDB 通过使用 MVCC 来获取高并发性, 并且实现 SQL 的 4 种隔离级别, 同时使用一种被称为 next-key locking 的策略来避免换读 (phantom) 现象. 除此之外, InnoDB 引擎还提供了插入缓存 (insert buffer), 二次写(doulbe write), 自适应哈希索引(adaptive hash index), 预读(read ahead) 等高性能技术.
MyISAM 存储引擎: 不支持事务, 表锁, 全文索引, 适合 olap(在线分析处理)应用, 其中 myd: 放数据文件, myi: 放索引文件. MySQL-5.0 版本之前, MyISAM 默认支持的表大小为 4G, 从 MySQL-5.0 以后, MyISAM 默认支持 256T 的表单数据. MyISAM 只缓存索引数据.
NDB 存储引擎: 集群存储引擎, share nothing, 特点是数据放在内存中, 可提高可用性. MySQL-5.1 版本开始可以将非索引数据放到磁盘上. NDB 之前的缺陷是 join 查询是 MySQL 数据库层完成的, 而不是存储引擎完成的, 复杂的 join 查询需要巨大的网络开销, 速度很慢. 当前 MySQL cluster7.2 版本中已经解决此问题, join 查询效率提高了 70 倍.
MySQL 还支持 Memory 存储引擎, Archive 存储引擎, Maria 存储引擎. 本文不再一一赘述.
来源: http://www.jianshu.com/p/486bd0929040