14.1 InnoDB 存储引擎介绍InnoDB 存储引擎是一个通用的兼顾高可靠、高性能的存储引擎。 在Mysql5.7, InnoDB是默认的存储引擎, 除非你在创建表时指定存储引擎,create table ... engine = ... 使用Innodb 的好处
DML操作遵循ACID 模型, 支持transactions 特性,commit, rollback, and crash-recovery 保护用户数据。可以查看14.2 InnoDB 和ACID 模型章节。
行级锁和 Oracle 风格的一致性读增强了多用户的并发和性能。 可以查看14.5 InnoDB 锁和事务模型章节。
InnoDB 表是依据主键组织的表,能优化查询。 每一个InnoDB 表都有一个主键索引称为clustered index 能做到查询时最小的I/O。 可以查看14.8.2.1 Clustered index 和Secondary 索引
为了维护数据的完整性,InnoDB支持 Foreign Key 约束。 可以查看14.8.1.6 InnoDB 和 Foreign Key 约束。
想了解InnoDB 与其他存储引擎的信息,可以查看15 章。
14.1.1 使用InnoDB 表的好处
使用InnoDB 可以获得如下收益:
在服务器因为硬件或软件故障crash的时候,在重启时无需做任何操作,InnoDB 会完成crash recovery 操作。
Innodb 会维护自己的buffer pool 缓存表和索引数据用于数据查询。 在专有数据库服务器,超过80%的物理内存常常被分配给Innodb buffer pool.
使用foreign keys 保障数据的完整性。
如果数据在磁盘或内存中损坏,会有checksum mechanism 警告。
设计表时添加主键有助于提高order by , group by 和join的性能。
change buffering 有助于inserts,updates,deletes的优化。
支持Adaptive Hash Index ,有助于查询性能。
支持表和索引压缩
14.1.2 InnoDB 表的最佳实践
给每张表添加主键有助于查询,或者设置auto-increment主键。
外键关联的字段需要添加索引
关闭自动提交 autocommit
通过使用start transaction 和commit 将DML操作分组的放在事务里
不要使用lock tables操作,使用select ... for update; 替代
开启innodb_file_per_table 参数将数据和索引放在单独的表空间而不是system 表空间,innodb_file_per_table参数在5.6.6中是默认开启的
尝试使用row_format = compressed参数
14.1.3 检查InnoDB 引擎是否可用
show engines;
14.1.4 Testing and Benchmarking with InnoDB 14.1.5 Turning off InnoDB
