14.1.1 使用 InnoDBtable 的好处

出于以下原因,您可能会发现InnoDB个 table 很有用:

  • 如果服务器由于硬件或软件问题而崩溃,无论当时数据库中发生了什么,重新启动数据库后都无需执行任何特殊操作。 InnoDB crash recovery自动确定在崩溃之前提交的所有更改,并撤消所有正在处理但尚未提交的更改。只需重新启动,然后从上次中断的地方 continue 即可。

  • InnoDB存储引擎维护自己的buffer pool,该buffer pool在访问数据时将 table 和索引数据缓存在主内存中。经常使用的数据直接从内存中处理。此缓存适用于多种类型的信息,并加快了处理速度。在专用数据库服务器上,通常将多达 80%的物理内存分配给缓冲池。

  • 如果将相关数据分成不同的 table,则可以设置foreign keys强制referential integrity。更新或删除数据,并自动更新或删除其他 table 中的相关数据。尝试将数据插入到辅助 table 中,而在主 table 中没有相应的数据,那么不良数据将自动被踢出。

  • 如果数据在磁盘或内存中损坏,则checksum机制会在使用前提醒您注意虚假数据。

  • 当为每个 table 设计具有适当的primary key列的数据库时,涉及这些列的操作会自动进行优化。在WHERE子句,ORDER BY子句,GROUP BY子句和join操作中引用主键列非常快。

  • 插入,更新和删除通过名为change buffering的自动机制进行了优化。 InnoDB不仅允许对同一 table 进行并发读写访问,而且还缓存更改后的数据以简化磁盘 I/O。

  • 性能收益不仅限于具有长期运行查询的巨型 table。当从 table 中一遍又一遍地访问相同的行时,称为自适应哈希指数的功能将接管这些查找,使其变得更快,就像它们从哈希 table 中出来一样。

  • 您可以压缩 table 和关联的索引。

  • 您可以创建和删除索引,而对性能和可用性的影响要小得多。

  • 截断file-per-tabletable 空间非常快,并且可以释放磁盘空间供 os 重用,而不是释放system tablespace中只有InnoDB可以重用的空间。

  • 对于BLOB和长文本字段(具有DYNAMIC行格式),table 数据的存储布局效率更高。

  • 您可以通过查询INFORMATION_SCHEMAtable 来监视存储引擎的内部工作情况。

  • 您可以通过查询Performance Schematable 来监视存储引擎的性能详细信息。

  • 您可以自由地将InnoDBtable 与其他 MySQL 存储引擎的 table 混合使用,即使在同一条语句中也是如此。例如,您可以使用join操作在单个查询中合并InnoDBMEMORYtable 中的数据。

  • InnoDB旨在处理大量数据时的 CPU 效率和最高性能。

  • InnoDBtable 可以处理大量数据,即使在文件大小限制为 2GB 的 os 上也是如此。

有关可以在应用程序代码中应用的InnoDB特定的调整技术,请参阅第 8.5 节“优化 InnoDBtable”