14.1.1 Benefits of Using InnoDB Tables 14.1.2 Best Practices for InnoDB Tables 14.1.3 Checking InnoDB Availability 14.1.4 Testing and Benchmarking with InnoDB 14.1.5 Turning Off InnoDB InnoDB 是一个多用途的存储引擎 平衡高可靠性和高性能。 在MySQL 5.6,InnoDB 是默认的存储引擎。 除非你配置一个不同的默认存储引擎, 执行一个CREATE TABLE statement without an ENGINE= clause 创建一个InnoDB 表 InnoDB 包含所有的功能在Mysql 5.1 是InnoDB插件的部分,加上新的指定的到MySQL 5.5或者更高 mysql和INFOMATION_SCHEMA databases 实现Mysql 内部仍旧使用MyISAM表。 特别的,你不能切换grant table 来使用InnoDB InnoDB 的关键优势: InnoDB 包含的关键优势: 1.它的DML 操作遵循ACID 模型, 事务具有提交,回滚, crash-recovery 来保护用户数据 2. 行级锁和Oracle风格一致性读增加了多用户并发和性能 3.InnoDB 表安排他的数据在磁盘优化查询基于主键。 每个InnoDB 有一个主键被称为 clustered index 组织数据最小化I/O用户主键查询 4.为了维护数据完整行,InnoDB 支持FOREIGN KEY约束。 使用外键,inserts, updates, and deletes 会被检查确保 它们不会导致在不同的表不一致性 14.1.1 使用InnoDB 表的好处: 如果你使用MyISAM 表但是由于技术原因没有提交,你会发现InnoDB 表收益有下面原因; 1.如果你的server crashes 因为硬件或者软件问题,无论发生什么在那个时间点, 你不需要做任何事情在重启数据库后。InnoDB crash recovery 自动的完成 任何改变提交的在crash的那个时间点, 不做任何改变 对于那些没有提交的 2.InnoDB 存储引擎维护它自己的buffer pool, cache表和index 数据在主内存作为数据被访问。 频繁的使用数据是被直接从内存处理。 这个缓存适用于很多类型的信息和加速处理。 在专用数据库里,多大80%的物理内存是被分配给InnoDB buffer pool 3.如果你拆分相关的数据到不同的表,你可以设置外键来加强完整性。 4.如果数据变的损坏在磁盘或者在内存,一个checksum 机制提醒你虚假数据在你使用它之前 5.当你设计你的数据库使用适当的主键列用于每个表,操作涉及的那些列是自动被优化的。 是非常快的 引用主键列在WHERE 子句,order by 子句 GROUP BY clauses, and join operations. 6.Inserts, updates, and deletes 是被优化的通过一个自动机制称为 change buffering, InnoDB 不只是允许并发读和写访问相同的表,它cahce 改变的数据组织成磁盘I/O 7.性能优势不限于 巨大的表使用大的查询, 当相同的记录被访问通过从一个表, 一个功能称为自适应Hash Index 接管让那些查询更快,如果它们来到一个hash表 8.你可以压缩表和相关的索引 9.你可以创建和drop 索引 对性能有更少的影响和可用性 10.truncate 一个file-per-table tablespace 是非常快的, 可以释放磁盘空间用于操作系统重用, 相比释放system tablespace的空间 只有InnoDB可以重用 11.存储布局对于表数据是更加有效的对于BLOB和 long text fields, 使用动态行格式 12.你可以通过查询INFORMATION_SCHEMA tables来监控存储引擎内部的工作 13.通过查询Performance Schema tables. 来监控存储引起的性能 14.你可以自由的混合InnoDB表从其他的MySQL 存储引擎, 15.InnoDB 被设计对于CPU效率和最大性能 当处理大量数据时 16.InnoDB 表可以处理大量的数据,即使操作系统 文件限制为2GB 17.