InnoDB存储引擎**支持事务**,其设计目标主要面向在线事务处理(OLTP)的应用。其特点是**行锁设计、支持外键,并支持类似于Oracle的非锁定读**,即默认读取操作不会产生锁。从MySQL 数据库 5.5.8 版本开始,InnoDB存储引擎是默认的存储引擎。<br /> InnoDB 通过使用**多版本并发控制 (MVCC)**来获得高并发性, 并且实现了 SQL 标准的 4 种隔离级别,默认为 REPEATABLE 级别。同时,使用一种被称为next-keylocking的策略来避免幻读(phantom)现象的产生。除此之外,InnoDB存储引擎还提供了插入缓冲(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能和高可用的功能。<br /> 对于表中数据的存储, InnoDB 存储引擎采用了**聚集(clustered)**的方式,因此每张表的存储都是按主键的顺序进行存放。
MyISAM和InnoDB区别
- 是否支持行级锁 : MyISAM 只有表级锁(table-level locking),而InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁。
- 是否支持事务和崩溃后的安全恢复: MyISAM 强调的是性能,每次查询具有原子性,其执行速度比InnoDB类型更快,但是不提供事务支持。但是InnoDB 提供事务支持,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。
- 是否支持外键: MyISAM不支持,而InnoDB支持。
- 是否支持MVCC :仅 InnoDB 支持。应对高并发事务, MVCC比单纯的加锁更高效;MVCC只在
READ COMMITTED 和 REPEATABLE READ 两个隔离级别下工作;MVCC可以使用 乐观(optimistic)锁 和 悲观(pessimistic)锁来实现;各数据库中MVCC实现并不统一。推荐阅读:MySQL-InnoDB-MVCC多版本并发控制
存储引擎的选择
- 如果没有特别的要求,使用默认的InnoDB就好
- MyISAM:以读写插入为主的应用程序
- InnoDB:更新操作频率高、需要保证数据的完整性,并发量高、支持事务和外键的应用程序