Day55 【概念解析】InnoDB
行业概念

Day55 【概念解析】InnoDB

· 约 2,383 字 · 阅读约 12 分钟
目录

前言

💡 InnoDB在MySQL 5.5.5之后,作为默认引擎的存在,是需要着重学习的,也是数据库相关领域考察的重点。

整理定义

InnoDB引擎概述

InnoDB是MySQL默认的通用存储引擎。默认情况下,InnoDB将数据存储在一系列的数据文件中,这些文件统被称为表空间(tablespace)。表空间本质上是一个由InnoDB自己管理的黑盒。

复述展开

InnoDB是MySQL的默认存储引擎,它是一个提供高性能、高可靠性和高并发的存储引擎。以下是我对InnoDB的一些理解:

  1. 事务支持:InnoDB支持ACID事务,这是它最重要的特性之一。事务可以帮助保证数据的一致性和完整性。

  2. 行级锁定:InnoDB支持行级锁定,这意味着在进行数据修改(如UPDATE或DELETE)时,只有被修改的数据行被锁定,其他行仍然可以被其他事务访问。这大大提高了并发性能。

  3. 支持外键:InnoDB支持外键和引用完整性,这是其他许多MySQL存储引擎不支持的。

  4. MVCC:InnoDB通过使用多版本并发控制(MVCC)来解决读-写冲突,从而使得读操作不会被写操作阻塞,提高了数据库的并发读写能力。

  5. 数据恢复能力:InnoDB有很好的崩溃恢复能力,通过日志和事务的回滚操作,可以恢复到崩溃前的状态。

  6. 支持B+树索引:InnoDB使用B+树作为索引结构,数据文件是索引的一部分,主键索引的叶节点就是数据节点。这种方式称为索引组织表。

  7. 支持全文索引:从MySQL 5.6版本开始,InnoDB也开始支持全文索引,这使得它可以进行全文搜索。

  8. 支持数据压缩:从MySQL 5.1版本开始,InnoDB支持表和索引的压缩,可以节省存储空间。

总的来说,InnoDB是一个功能强大、性能高效的存储引擎,特别适合处理大量的读写操作和需要事务支持的应用。

What is InnoDB?

InnoDB 是数据库管理系统 MySQL 和 MariaDB 的存储引擎。自2010年MySQL 5.5.5发布以来,它取代了MyISAM成为MySQL的默认表类型。

如果直接使用 create table 语句不带 engine 关键字,那么会创建一个 InnoDB 的表。

InnoDB 的主要优势

  • 其DML操作遵循ACID模型,事务具有提交、回滚和崩溃恢复功能,以保护用户数据。

  • 行级锁定和 Oracle 风格的一致性读取提高了多用户并发性和性能。

  • InnoDB 表在磁盘上排列数据以根据主键优化查询。 每个 InnoDB 表都有一个称为聚集索引的主键索引,用于组织数据以最大程度地减少主键查找的 I/O。

  • 为了保持数据完整性,InnoDB 支持 FOREIGN KEY 约束。 使用外键,会检查插入、更新和删除,以确保它们不会导致相关表之间出现不一致。

InnoDB 最佳实践

  • 为每个表指定一个主键,使用最频繁查询的列或列,或者如果没有明显的主键,则使用自动增量值。

  • 无论何时根据这些表的相同ID值从多个表中提取数据,都使用连接。为了快速的连接性能,在连接列上定义外键,并在每个表中用相同的数据类型声明这些列。添加外键确保引用的列被索引,这可以提高性能。外键还将删除和更新传播到所有受影响的表,并阻止在子表中插入数据,如果父表中不存在相应的ID。

  • 关闭自动提交。每秒提交数百次会限制性能(受存储设备的写速度限制)。

  • 将相关的DML操作组合成事务,用START TRANSACTION和COMMIT语句将它们括起来。

  • 不要使用LOCK TABLES语句。InnoDB可以处理多个会话同时读写同一张表,而不牺牲可靠性或高性能。要获得一组行的独占写访问权限,使用SELECT … FOR UPDATE语法仅锁定你打算更新的行。

  • 启用innodb_file_per_table变量或使用通用表空间将表的数据和索引放入单独的文件中,而不是系统表空间。innodb_file_per_table变量默认启用。

  • 评估您的数据和访问模式是否受益于InnoDB表或页面压缩功能。您可以在不牺牲读/写能力的情况下压缩InnoDB表。

  • 使用—sql_mode=NO_ENGINE_SUBSTITUTION选项运行服务器,以防止使用您不想使用的存储引擎创建表。

💡 总之,使用InnoDB表时的最佳实践包括为每个表指定主键、使用连接、关闭自动提交、将DML操作分组到事务中、避免使用LOCK TABLES语句、启用innodb_file_per_table变量、评估数据压缩功能的适用性以及使用NO_ENGINE_SUBSTITUTION SQL模式。遵循这些最佳实践可以帮助您充分利用InnoDB存储引擎的性能和功能。

理解体会

InnoDB 存储引擎特性表

与其他引擎对比:

注:

  1. 在服务器上实现,而不是在存储引擎上实现。

  2. 只有在使用压缩行格式时,才支持压缩的MyISAM表。使用MyISAM的压缩行格式的表是只读的。

  3. 通过服务器的加密函数实现。

  4. 通过服务器的加密函数实现;在MySQL 5.7及以后版本,支持数据静态加密。

  5. 通过服务器的加密函数实现;从NDB 8.0.22开始,支持加密的NDB备份;从NDB 8.0.29开始,支持透明的NDB文件系统加密。

  6. 在MySQL 5.6及以后版本,支持FULLTEXT索引。

  7. 在MySQL 5.7及以后版本,支持地理空间索引。

  8. InnoDB内部使用哈希索引作为其自适应哈希索引特性。

参考:

MySQL :: MySQL 8.0 Reference Manual :: 15.1 Introduction to InnoDB

相关文章