15.1.1 InnoDB存储引擎的优势

原文地址:https://dev.mysql.com/doc/refman/8.0/en/innodb-benefits.html

你将会发现使用InnoDB会有如下的优势:

  • 如果你的服务器由于软硬件故障到导致宕机,不管此时你的数据库在处理什么,重启数据库后你都不需要做任何额外的工作。InnoDB的故障恢复功能能够自动把故障发生之前提交的任何修改持久化,并撤销任何未提交的修改。仅仅重启数据库然后什么都不用做。

  • InnoDB存储引擎能在数据被访问的时候用自己的buffer pool来把表和索引数据缓存在内存当中。访问频率高的数据直接从内存读取。这种缓存机制能够应用在多种数据场景下来加速它们的处理。对于单独部署的数据库服务器,通常高达80%的物理内存会被分配给buffer pool。

  • 如果你把相关联的数据分开存储到不同的表中,你可以使用外键来强制关联完整性。当更新或删除数据时,关联的数据会自动更新和删除。试图向关联表中插入一条不在主表里的数据,脏数据会被自动剔除。

  • 如果磁盘或内存中的数据遭到破坏,在你使用这些数据前,校验和机制会向你发出报警。

  • 当你在设计数据库时为每张表都选择了一个合适的主键列时,对这些主键列进行的操作都会被自动优化。对主键进行WHERE查询,ORDER BY排序,GROUP BY和JOIN操作时都是非常高效的。

  • 增删改操作通过一种称之为change buffering的机制来自动进行优化。InnoDB不仅允许对同一张表并发的进行读写,同时缓存数据让磁盘IO变为顺序读写(译注:对磁盘顺序读写的性能远远高于随机读写)。

  • InnoDB表的性能优势不仅体现在对大型表的耗费时间长的查询,如果频繁访问一张表中相同的行时,一种被称为Adaptive Hash Index的索引会启用来加快数据的查询,就如同这些数据是从一张哈希表中查出来一样。

  • 你可以压缩数据表以及它们的索引。

  • 创建或者删除索引对数据库的性能和可用性只有很小的影响。

  • 清空一张单独文件的表(file-per-table)是非常快速的,并且空间释放后再次可以被操作系统所用,相对的,使用共享系统表空间的表(system tablespace)空间释放后只能被InnoDB存储引擎使用。

  • 使用动态行格式的表数据存储结构对于BLOB和长文本字段更加的高效。

  • 你可以通过查询 INFORMATION_SCHEMA 表来监控存储引擎的内部工作。

  • 你可以通过查询 Performance Schema 表来监控存储引擎的性能详情。

  • 你可以放心的混用InnoDB和其他的存储引擎,即使是在同一个查询语句中。例如,你可以在InnoDB表和内存表之间使用JOIN操作。

  • InnoDB为处理大量的数据做了最大程度的cpu和性能上的优化。

  • InnoDB即使在操作系统限制单个文件大小在2GB以下,也能处理大量的数据。

关于InnoDB在代码中的调优技术,请参阅 “第8.5节 InnoDB表优化”。