InnoDB

网友投稿 695 2022-11-03

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

InnoDB

愿少年,乘风破浪,他日毋忘化雨功。 —— 汪曾祺《徙》

本文翻译自 MySQL 官方文档。文字提到的很多知识点可能会很生疏,但在后续的文章中都会一一接触。那时,便明了了。

InnoDB 是一个通用的存储引擎,它平衡了高可靠性和高性能。在 MySQL 8.0 中,InnoDB 是默认的 MySQL 存储引擎。除非您配置了不同的默认存储引擎,否则在不使用 ENGINE 子句的情况下发出 CREATE TABLE 语句将创建InnoDB表。

InnoDB 的主要优势:

它的 DML 操作遵循 ACID 模型,事务具有提交、回滚和崩溃恢复功能,以保护用户数据。行级锁和 Oracle 风格一致读提高了多用户并发性和性能。InnoDB 表根据主键排列磁盘上的数据以优化查询。每个 InnoDB 都有一个称为聚集索引的主键索引,为达到最小化 I/O ,它通过主键查找组织数据。为保证数据的完整性,InnoDB 支持外键约束。对于外键,将检查插入、更新和删除,以确保它们不会导致相关表之间的不一致。

InnoDB 表的好处

如果服务器由于硬件或软件问题而意外退出,不管当时数据库中发生了什么,在重新启动数据库之后,都不需要做任何特殊的操作。InnoDB crash recovery 会自动完成崩溃之前提交的更改,并撤销正在进行但尚未提交的更改,从而允许您重新启动并从上次停止的位置继续。InnoDB 存储引擎维护自己的缓冲池,当数据被访问时,它在主内存中缓存表和索引数据。经常使用的数据直接从内存中处理。此缓存适用于多种类型的信息并加快处理速度。在专用的数据库服务器上,高达 80% 的物理内存通常分配给缓冲池。如果将相关数据拆分为不同的表,则可以设置强制引用完整性的外键。如果磁盘或内存中的数据损坏,则 checksum 机制会在使用伪数据之前向您发出警告。innodb_checksum_algorithm 变量定义 InnoDB 使用的校验和算法。在为每个表设计具有适当主键列的数据库时,涉及这些列的操作将自动优化。在 WHERE 子句、ORDER BY 子句、GROUP BY 子句和 join 操作中引用主键列的速度非常快。插入、更新和删除由一种称为 "change buffering" 的自动机制进行优化。InnoDB不仅允许对同一个表进行并发读写访问,还缓存更改的数据以简化磁盘I/O。性能优势不局限于长时间运行查询的大表。当从一个表中反复访问相同的行时,自适应哈希索引将接管这些查询,使其更快,就像它们来自哈希表一样。压缩表和关联索引。加密数据。创建和删除索引以及执行其它 DDL 操作,对性能和可用性影响更小。截取一个 file-per-table 表空间 非常快,可以释放磁盘空间供操作系统重用。使用 DYNAMIC 行格式,表数据的存储布局对于 BLOB 和长文本字段更有效。可以通过查询 INFORMATION_SCHEMA 库内的表中信息来监视存储引擎的内部工作。可以通过查询 Performance Schema库内的表来监控存储引擎的性能详细信息。可以将 InnoDB 表与其它 MySQL 存储引擎的表混合,甚至可以在同一语句中。例如,可以使用 join 操作在单个查询中组合 InnoDB 和 MEMORY 表中的数据。InnoDB 的设计是为了在处理大数据量时提高 CPU 效率和最大化性能。InnoDB 表可以处理大量数据,即使在文件大小限制为 2 GB 的操作系统上也是如此。

InnoDB 的最佳实践

验证 InnoDB 是默认的存储引擎,使用 SHOW ENGINES; 语句 或者 SELECT * FROM INFORMATION_SCHEMA.ENGINES;。

如果 InnoDB 不是默认的存储引擎,那么可以通过在命令行中定义 --default-storage-engine=InnoDB 或在 MySQL server 选项文件的 [mysqld] 部分中定义 default-storage -engine=InnoDB 来重新启动服务器。

上一篇:软件测试培训之测试决策5要素
下一篇:软件测试培训之测试的基本功
相关文章

 发表评论

暂时没有评论,来抢沙发吧~