什么是存储引擎:
存储引擎可以完成数据存储,并为存储的数据操作索引文件、数据文件等功能。
MySQL支持的存储引擎和特点:
InnoDB(5.5.8后默认使用该引擎)及其特点
事务相关的特点:
1. 支持事务
隔离级别默认为为 Repeatable,但与普通的 Repeatable 模式不同的是,InnoDB 使用了 next-key-locking(间隙锁)避免了 phantom(幻读)问题
2. 支持 行/表 级锁
索引相关的特点:
3. 支持外键
4. 默认使用B+Tree,属于 clustered 索引
每一个表都有一个聚簇索引,要么是主键,要么是拥有唯一索引(unique)的列,要么是自动产生的隐式聚簇索引列。InnoDB 会按聚簇顺序存储表中每一行数据。
5. 支持 Fulltext 全文索引
InnoDB 1.2.x 开始支持,MySQL 5.6 及以后版本,InnoDB 的版本才升级到 1.2.x。
其他特点:
6.支持Online DDL
MyISAM 及其特点:
索引文件(.MYI)和数据文件(.MYD)是相互独立的,与 InnoDB 不同的是,缓冲池内只缓存索引文件,不缓存数据文件。
1. 只支持表锁
2. 使用的非聚簇索引,关于聚簇 / 非聚簇索引可参考
3. 支持 Fulltext
Memory(Heap):
1. 数据存储在内存中,没有持久化机制
2. 默认使用 Hash(哈希)索引
InnoDB 与 MyISAM 的对比
MyISAM 读取效率较高?
片面的说法,对于 ETL(Extract Transform Load)数据厂库类型的业务,MyISAM 有更好的优势,但在 OLTP(Online transaction processing,在线事务处理) 业务中,InnoDB 的效率更高。