MySQL Innodb存储引擎简介

Innodb做为第三方公司所开发的存储引擎,和MySQL遵守相同的开源License协议。

一、功能方面的特点

1、支持事务安全
Innodb在功能方面最重要的一点就是对事务安全的支持,这无疑是让Innodb成为MySQL最为流行的存储引擎之一的一个非常重要原因。而且实现了SQL92标准所定义的所有四个级别(READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ 和 SERIALIZABLE)。对事务安全的支持,无疑让很多之前因为特殊业务要求而不得不放弃使用MySQL的用户转向支持MySQL,以及之前对数据库选型持观望态度的用户,也大大增加了对MySQL好感。

2、数据多版本读取
Innodb在事务支持的同时,为了保证数据的一致性以及并发时候的性能,通过对undo信息,实现了数据的多版本读取。

3、锁定机制的改进
Innodb改变了MyISAM的锁机制,实现了行锁。虽然Innodb的行锁机制的实现是通过索引来完成的,但毕竟在数据库中99%的SQL语句都是要使用索引来做检索数据的。所以,行锁定机制也无疑为Innodb在承受高并发压力的环境下增强了不小的竞争力。

4、实现外键
Innodb实现了外键引用这一数据库的重要特性,使在数据库端控制部分数据的完整性成为可能。虽然很多数据库系统调优专家都建议不要这样做,但是对于不少用户来说在数据库端加如外键控制可能仍然是成本最低的选择。

二、Innodb的物理结构分为两大部分

1、数据文件(表数据和索引数据)
存放数据表中的数据和所有的索引数据,包括主键和其他普通索引。在Innodb中,存在了表空间(tablespace)这样一个概念,但是他和Oracle的表空间又有较大的不同。首先,Innodb的表空间分为两种形式。一种是共享表空间,也就是所有表和索引数据被存放在同一个表空间(一个或多个数据文件)中,通过innodb_data_file_path来指定,增加数据文件需要停机重启。另外一种是独享表空间,也就是每个表的数据和索引被存放在一个单独的.ibd文件中。

2、日志文件
Innodb的日志文件和Oracle的redo日志比较类似,同样可以设置多个日志组(最少2个),同样采用轮循策略来顺序的写入,甚至在老版本中还有和Oracle一样的日志归档特性。如果你的数据库中有创建了Innodb的表,那么千万别全部删除innodb的日志文件,因为很可能就会让你的数据库crash,无法启动,或者是丢失数据。
由于Innodb是事务安全的存储引擎,所以系统Crash对他来说并不能造成非常严重的损失,由于有redo日志的存在,有checkpoint机制的保护,Innodb完全可以通过redo日志将数据库Crash时刻已经完成但还没有来得及将数据写入磁盘的事务恢复,也能够将所有部分完成并已经写入磁盘的未完成事务回滚并将数据还原。