MySQL术语表

这些术语通常用于有关MySQL数据库服务器的信息中。 该词汇表起源于关于InnoDB存储引擎的术语的参考,并且大多数定义与InnoDB相关。

一个

.ARM文件

ARCHIVE 表格的 数据。 .ARZ文件 对比 具有此扩展名的文件始终包含在由 MySQL Enterprise Backup 产品 mysqlbackup 命令生成的 备份中

另请参阅 .ARZ文件 MySQL Enterprise Backup mysqlbackup命令

.ARZ文件

ARCHIVE表的数据。 .ARM文件 对比 具有此扩展名的文件始终包含在由 MySQL Enterprise Backup 产品 mysqlbackup 命令生成的 备份中

另请参见 .ARM文件 MySQL Enterprise Backup mysqlbackup命令

代表原子性,一致性,隔离性和耐久性的首字母缩略词。 这些属性在数据库系统中都是可取的,并且都与 事务 的概念密切相关 InnoDB 遵守ACID原则 的交易特征

事务是 可以 提交 回滚的 原子 工作单元 当事务对数据库进行多次更改时,要么在提交事务时所有更改都成功,要么在事务回滚时撤消所有更改。

数据库始终保持一致状态 - 每次提交或回滚后,以及事务正在进行中。 如果跨多个表更新相关数据,查询将查看所有旧值或所有新值,而不是旧值和新值的混合。

交易在进行过程中受到保护(隔离); 他们不能互相干扰或看到彼此未提交的数据。 这种隔离是通过 锁定 机制 实现的 经验丰富的用户可以调整 隔离级别 ,在 保证事务确实不会相互干扰的情况下, 减少保护以支持提高性能和 并发性

事务的结果是持久的:一旦提交操作成功,该事务所做的更改就可以避免电源故障,系统崩溃,竞争条件或许多非数据库应用程序易受攻击的其他潜在危险。 耐用性通常涉及写入磁盘存储,具有一定的冗余以防止写入操作期间的电源故障或软件崩溃。 (在 InnoDB 双重写入缓冲区 有助于提高耐用性。)

另请参阅 原子 提交 并发 双写缓冲区 隔离级别 锁定 回滚 事务

自适应冲洗

InnoDB 的算法, 可以平滑 检查点 引入的I / O开销 取而代之的 冲洗 所有已修改 页面 缓冲池 数据文件 一次,MySQL的定期刷新小套修改页面。 自适应刷新算法通过基于刷新率和 生成 重做 信息的 速度来估计执行这些周期性刷新的最佳速率来扩展该过程

另请参阅 缓冲池 检查点 数据文件 刷新 InnoDB 页面 重做日志

自适应哈希索引

通过 在内存中 构造 哈希索引 InnoDB ,可以使用 = IN 运算符 加速查找的表 的优化 MySQL监视 表的 索引搜索 ,如果查询可以从哈希索引中受益,它会自动为 经常访问的 索引 构建一个 从某种意义上说,自适应哈希索引在运行时配置MySQL以利用充足的主内存,更接近主内存数据库的体系结构。 此功能由 InnoDB innodb_adaptive_hash_index 配置选项。 由于此功能有利于某些工作负载而非其他工作负载,并且用于哈希索引的内存在 缓冲池中 保留,因此 通常您应该使用此功能进行基准测试,无论是启用还是禁用。

哈希索引始终基于表上的现有 B树 索引 构建 MySQL可以在为B树定义的任意长度的密钥的前缀上构建哈希索引,具体取决于针对索引的搜索模式。 哈希索引可以是部分的; 整个B树索引不需要缓存在缓冲池中。

在MySQL 5.6及更高版本中,利用表的快速单值查找的另一种方法 InnoDB 是使用 InnoDB memcached 插件。 有关 详细信息 请参见 第15.19节“InnoDB memcached插件”

另请参见 B树 缓冲池 哈希索引 memcached 页面 二级索引

AIO

异步I / O的 缩写 您可能会在 InnoDB 消息或关键字中 看到此首字母缩略词

另请参见 异步I / O

应用程序编程接口(API)

一组功能或程序。 API为函数,过程,参数和返回值提供了一组稳定的名称和类型。

应用

MySQL Enterprise Backup 产品 生成的 备份 不包括备份进行时发生的最新更改时,更新备份文件以包含这些更改的过程称为 应用 步骤。 它由 命令 apply-log 选项 指定 mysqlbackup

在应用更改之前,我们将文件称为 原始备份 应用更改后,我们将这些文件称为 准备备份 更改记录在 ibbackup_logfile 文件中; 完成应用步骤后,不再需要此文件。

另请参阅 热备份 ibbackup_logfile MySQL Enterprise Backup 准备备份 原始备份

异步I / O.

一种I / O操作,允许在I / O完成之前继续进行其他处理。 也称为 非阻塞I / O ,缩写为 AIO InnoDB 对于可以并行运行而不影响数据库可靠性的某些操作,使用这种类型的I / O,例如将页面读入 尚未实际请求 缓冲池 ,但可能很快就需要。

过去, InnoDB 仅在Windows系统上使用异步I / O. 从InnoDB Plugin 1.1和MySQL 5.5开始, InnoDB 在Linux系统上使用异步I / O. 此更改引入了依赖性 libaio Linux系统上的异步I / O使用 innodb_use_native_aio 默认启用 选项进行 配置 在其他类Unix系统上,InnoDB仅使用同步I / O.

另请参阅 缓冲池 非阻塞I / O

原子

在SQL上下文中, 事务 是完全成功( 提交时 )或完全没有效果( 回滚时 )的工作单元。 事务的不可分割(“原子”)属性是 首字母缩写词 ACID中 A

另请参见 ACID 提交 回滚 事务

原子DDL

原子 DDL 语句将 数据字典 更新, 存储引擎 操作和 与DDL操作关联的 二进制日志 写入组合到单个原子事务中。 即使服务器在操作期间暂停,事务也可以完全提交或回滚。 MySQL 8.0中添加了Atomic DDL支持。 有关更多信息,请参见 第13.1.1节“原子数据定义语句支持”

另请参见 二进制日志 数据字典 DDL 存储引擎

原子指令

CPU提供的特殊指令,确保关键的低级操作不会被中断。

自动递增

表列的属性(由 AUTO_INCREMENT 关键字 指定 ),可在列中自动添加值的升序。

它为开发人员节省了工作,而不必在插入新行时生成新的唯一值。 它为查询优化器提供了有用的信息,因为已知该列不为null且具有唯一值。 来自这样一列的值可以在各种上下文中用作查找键,并且因为它们是自动生成的,所以没有理由改变它们。 因此,主键列通常被指定为自动递增。

使用基于语句的复制可能会出现自动增量列的问题,因为由于计时问题,重播从站上的语句可能不会产生与主服务器上相同的列值集。 如果有自动递增主键,则只能使用基于语句的复制设置 innodb_autoinc_lock_mode=1 如果您具有 innodb_autoinc_lock_mode=2 允许插入操作的更高并发性,则使用 基于行的复制 而不是 基于语句的复制 innodb_autoinc_lock_mode=0 除兼容性目的外,不应使用 该设置

连续锁定模式( innodb_autoinc_lock_mode=1 )是MySQL 8.0.3之前的默认设置。 从MySQL 8.0.3开始,交错锁定模式( innodb_autoinc_lock_mode=2 )是默认值,它反映了从基于语句的复制到基于行的复制的更改作为默认复制类型。

另请参见 自动增量锁定 innodb_autoinc_lock_mode 主键 基于行的复制 基于语句的复制

自动增量锁定

自动增量 主键 的便利性 涉及一些与并发的权衡。 在最简单的情况下,如果一个事务正在向表中插入值,则任何其他事务必须等待对该表执行自己的插入,以便第一个事务插入的行接收连续的主键值。 InnoDB 包括优化和 innodb_autoinc_lock_mode 选项,以便您可以在可预测的自动增量值序列和 插入操作的 最大 并发 之间配置和实现最佳平衡

另请参见 auto-increment concurrency innodb_autoinc_lock_mode

自动提交

在每个 SQL 语句 之后 导致 提交 操作的 设置 不建议使用这种工作模式 表与 交易 跨越几个语句。 它可以帮助表现为 只读事务 的表,它从开销减少 锁定 和生成的 撤销 数据,尤其是在MySQL 5.6.4及以上。 它也适用于处理 不适用交易的表格。 InnoDB InnoDB MyISAM

另请参见 commit locking 只读事务 SQL 事务 撤消

可用性

能够应对主机上的故障,并在必要时从中恢复故障,包括MySQL,操作系统或可能导致停机的硬件和维护活动的故障。 通常将 可伸缩性 与大规模部署的关键方面相结合。

另请参见 可伸缩性

B树

一种在数据库索引中很常用的树数据结构。 结构始终保持排序,从而能够快速查找完全匹配(等于运算符)和范围(例如,大于,小于和 BETWEEN 运算符)。 这种类型的索引可用于大多数存储引擎,例如 InnoDB MyISAM

因为B树节点可以有许多子节点,所以B树与二叉树不同,二叉树每个节点限制为2个子节点。

哈希索引 形成 对比, 哈希索引 仅在 MEMORY 存储引擎中 可用 MEMORY 存储引擎也可以用B-tree索引,你应该选择B树索引 MEMORY 的表,如果某些查询使用范围经营。

术语B树的使用旨在作为一般索引设计类的参考。 由于经典B树设计中不存在的复杂性,MySQL存储引擎使用的B树结构可以被视为变体。 有关相关信息,请参阅 MySQL Internals Manual InnoDB 页面结构 Fil Header 部分

另请参见 哈希索引

反引号

如果MySQL SQL语句中的标识符 ` 包含特殊字符或保留字,则 必须使用反引号字符( 来引用 它们。 例如,要引用名为table的表 FOO#BAR 命名 的列 SELECT ,您可以将标识符指定为 `FOO#BAR` `SELECT` 由于反引号提供了额外的安全级别,因此它们广泛用于程序生成的SQL语句中,其中标识符名称可能事先不知道。

许多其他数据库系统 " 在这些特殊名称周围 使用双引号( )。 为了便于移植,您可以 ANSI_QUOTES 在MySQL中 启用 模式并使用双引号而不是反引号来限定标识符名称。

另请参见 SQL

备用

从MySQL实例复制部分或全部表数据和元数据的过程,以便妥善保管。 也可以参考复制文件集。 这对DBA来说是一项至关重要的任务。 此过程的反向是 还原 操作。

使用MySQL, 物理备份 MySQL Enterprise Backup 产品执行, 逻辑备份 mysqldump 命令执行。 这些技术在备份数据的大小和表示以及速度(尤其是恢复操作的速度)方面具有不同的特征。

备份进一步分为 冷, 具体取决于它们对正常数据库操作的干扰程度。 (热备份干扰最小,冷备份最多。)

另请参阅 冷备份 热备份 逻辑备份 MySQL企业备份 mysqldump 物理备份 热备份

基本栏目

存储生成的列或虚拟生成列所基于的非生成表列。 换句话说,基本列是非生成的表列,它是生成的列定义的一部分。

另请参见 生成列 存储生成列 虚拟生成列

公测

软件产品生命周期的早期阶段,当它仅用于评估时,通常没有明确的版本号或小于1的数字。 InnoDB 不使用beta标识,更喜欢 可以延伸到几个点 早期采用者 阶段发布,导致 GA 发布。

另见 早期采用者 GA

二进制日志

包含尝试更改表数据的所有语句的记录的文件。 可以重播这些语句,以便在 复制 方案 中使从属服务器保持最新 ,或者在从备份还原表数据后使数据库保持最新。 可以打开和关闭二进制日志记录功能,但如果您使用复制或执行备份,Oracle建议始终启用它。

您可以使用 mysqlbinlog 命令 检查二进制日志的内容,或在复制或恢复期间重播这些语句 有关二进制日志的完整信息,请参见 第5.4.4节“二进制日志” 有关与二进制日志相关的MySQL配置选项,请参见 第17.1.6.4节“二进制日志记录选项和变量”

对于 MySQL Enterprise Backup 产品,二进制日志的文件名和文件中的当前位置是重要的详细信息。 要在复制上下文中进行备份时记录主服务器的此信息,可以指定该 --slave-info 选项。

在MySQL 5.0之前,可以使用类似的功能,称为更新日志。 在MySQL 5.0及更高版本中,二进制日志替换了更新日志。

另请参阅 binlog MySQL Enterprise Backup 复制

二进制日志

二进制日志 文件 的非正式名称 例如,您可能会在电子邮件或论坛讨论中看到此缩写。

另请参见 二进制日志

盲目查询扩展

子句 启用的 特殊 全文搜索 模式 WITH QUERY EXPANSION 它执行两次搜索,其中第二次搜索的搜索短语是与来自第一次搜索的少数最高度相关的文档连接的原始搜索短语。 该技术主要适用于短搜索短语,可能只有一个单词。 它可以发现文档中未出现精确搜索词的相关匹配。

另请参见 全文搜索

瓶颈

系统的一部分,其大小或容量受到限制,具有限制总吞吐量的效果。 例如,内存区域可能小于必要的内存区域; 访问单个所需资源可能会阻止多个CPU核心同时运行; 或等待磁盘I / O完成可能会阻止CPU以满容量运行。 消除瓶颈往往会提高 并发性 例如, 当多个会话同时读取和写入缓冲池时 ,具有多个 InnoDB 缓冲池 实例 的能力可以 减少争用。

另请参见 缓冲池 并发

弹跳

一个 关机 操作,紧接着将进行重新启动。 理想情况下, 预热 时间 相对较短, 因此性能和吞吐量很快就会恢复到较高水平。

另见 shutdown

伙伴分配器

一种管理 InnoDB 缓冲池中 不同大小 页面的 机制

另请参见 缓冲池 页面 页面大小

缓冲

用于临时存储的内存或磁盘区域。 数据缓冲在内存中,因此可以通过一些大的I / O操作而不是许多小的I / O操作有效地写入磁盘。 数据在磁盘上缓冲以获得更高的可靠性,因此即使 在最糟糕的时间发生 崩溃 或其他故障 ,也可以恢复数据 InnoDB使用的主要缓冲区类型是 缓冲池 双写缓冲区 更改缓冲区

另请参见 缓冲池 更改缓冲区 崩溃 双写缓冲区

缓冲池

保存 InnoDB 表和索引的 高速缓存 数据 的内存区域 为了提高大容量读取操作的效率,缓冲池被分成 可以容纳多行的 页面 为了提高缓存管理的效率,缓冲池被实现为链接的页面列表; 使用 LRU 算法 的变体,很少使用的数据在缓存中老化 在具有大内存的系统上,可以通过将缓冲池划分为多个 缓冲池实例 来提高并发性

多个 InnoDB 状态变量, INFORMATION_SCHEMA 表和 performance_schema 表有助于监视缓冲池的内部工作方式。 从MySQL 5.6开始,通过在服务器关闭时保存缓冲池状态并在服务器启动时将缓冲池恢复到相同状态,可以在重新启动服务器后避免冗长的预热期,特别是对于具有大缓冲池的实例。 请参见 第15.8.3.7节“保存和恢复缓冲池状态”

另请参见 缓冲池实例 LRU 页面 预热

缓冲池实例

缓冲池 可以划分 的多个区域中的任何一个 ,由 innodb_buffer_pool_instances 配置选项 控制 指定的总内存大小 innodb_buffer_pool_size 在所有缓冲池实例之间划分。 通常,具有多个缓冲池实例适用于为缓冲池分配多个千兆字节的系统, InnoDB 每个实例为1千兆字节或更大。 在从多个并发会话加载或查找缓冲池中的大量数据的系统上,具有多个缓冲池实例减少了对管理缓冲池的数据结构的独占访问的争用。

另请参见 缓冲池

内建的

InnoDB MySQL中 的内置 存储引擎是存储引擎的原始分发形式。 InnoDB插件 对比 从MySQL 5.5开始,InnoDB插件作为内置 InnoDB 存储引擎(称为InnoDB 1.1) 合并回MySQL代码库

这种区别主要在MySQL 5.1中很重要,其中功能或错误修复可能适用于InnoDB插件但不适用于内置 InnoDB ,反之亦然。

另请参见 InnoDB

商业规则

构成商业软件基础的行为的关系和顺序,用于经营商业公司。 有时这些规则由法律规定,有时则由公司政策规定。 仔细规划可确保数据库编码和实施的关系以及通过应用程序逻辑执行的操作能够准确反映公司的实际策略并能够处理实际情况。

例如,离开公司的员工可能会触发人力资源部门的一系列操作。 人力资源数据库可能还需要灵活地表示有关已被雇用但尚未开始工作的人的数据。 关闭在线服务的帐户可能会导致数据从数据库中删除,或者数据可能会被移动或标记,以便在重新打开帐户时可以恢复数据。 除了基本的健全性检查(例如工资不是负数)之外,公司可能会制定有关最高工资,最低工资和调整的政策。 零售数据库可能不允许使用相同序列号的购买多次返回,

另请参阅 关系

C

.cfg文件

与可 InnoDB 传输表空间 功能 一起使用的元数据文件 它由命令生成 FLUSH TABLES ... FOR EXPORT ,将一个或多个表置于可以复制到另一个服务器的一致状态。 .cfg 文件与相应的 .ibd文件 一起复制 ,并用于 步骤 期间 调整 .ibd 文件 的内部值 ,例如 空间ID ALTER TABLE ... IMPORT TABLESPACE

另请参见 .ibd文件 空间ID ,可 传输表空间

高速缓存

存储区域的通用术语,用于存储频繁或高速检索的数据副本。 InnoDB ,缓存 的主要类型是 缓冲池

另请参见 buffer buffer pool

基数

列中 的不同值的数量 当查询引用具有关联 索引 的列时,每列的基数会影响哪种访问方法最有效。 例如,对于具有 唯一约束 的列 ,不同值的数量等于表中的行数。 如果一个表有一百万行但只有一个特定列的10个不同值,则每个值(平均)发生100,000次。 SELECT c1 FROM t1 WHERE c1 = 50; 因此, 诸如此类的查询 可能返回1行或大量行,并且数据库服务器可能会根据基数来不同地处理查询 c1

如果列中的值具有非常不均匀的分布,则基数可能不是确定最佳查询计划的好方法。 例如, SELECT c1 FROM t1 WHERE c1 = x; 可能会返回1行时 x=50 和100万行时 x=30 在这种情况下,您可能需要使用 索引提示 来传递有关哪种查找方法对特定查询更有效的建议。

基数也可以应用于多列中存在的不同值的数量,如在 复合索引中

另请参见 复合索引 索引 索引提示 随机潜水 选择性 唯一约束

改变缓冲区

一个特殊的数据结构,记录更改 网页 的辅助索引 这些值可能会导致从SQL INSERT UPDATE DELETE 语句( DML )。 涉及更改缓冲区的一组功能统称为 更改缓冲 ,包括 插入缓冲 删除缓冲 清除缓冲

当二级索引中的相关页面不在 缓冲池中 时,更改仅记录在更改缓冲区中 当相关索引页面进入缓冲池而关联更改仍在更改缓冲区中时,该页面的更改 使用更改缓冲区中的数据 应用于缓冲池( 合并 )。 在系统大部分空闲时或在慢速关闭期间运行 清除 操作会 定期 将新索引页写入磁盘。 与每个值立即写入磁盘的情况相比,清除操作可以更有效地写入一系列索引值的磁盘块。

物理上,更改缓冲区是 系统表空间的 一部分 ,因此索引更改在数据库重新启动时保持缓冲。 由于某些其他读取操作,当页面进入缓冲池时, 仅应用( 合并 更改

存储在更改缓冲区中的数据种类和数量由 innodb_change_buffering innodb_change_buffer_max_size 配置选项控制。 要查看有关更改缓冲区中当前数据的信息,请发出 SHOW ENGINE INNODB STATUS 命令。

以前称为 插入缓冲区

另请参阅 缓冲池 更改缓冲 删除缓冲 DML 插入缓冲区 插入缓冲 合并 页面 清除 清除缓冲 二级索引 系统表空间

改变缓冲

涉及 更改缓冲区 的功能的通用术语 ,包括 插入缓冲 删除缓冲 清除缓冲 SQL语句导致的索引更改(通常可能涉及随机I / O操作)会被后台 线程 保留并定期执行 与将每个值立即写入磁盘的情况相比,这一系列操作可以更有效地为一系列索引值写入磁盘块。 由控制 innodb_change_buffering innodb_change_buffer_max_size 配置选项。

另请参阅 更改缓冲区 删除缓冲 插入缓冲 清除缓冲

检查站

当对 缓存池中 缓存的数据页进行 更改时,这些更改将在 稍后的某个时间 写入 数据文件 ,这一过程称为 刷新 检查点是 已成功写入数据文件 的最新更改(由 LSN 表示)的记录

另请参见 缓冲池 数据文件 刷新 模糊检查点 LSN

校验

In InnoDB ,一种验证机制,用于 在将 表空间中 页面 从磁盘读入 缓冲池 时检测损坏 此功能由 MySQL 5.5中 配置选项 控制 在MySQL 5.6.3中被弃用,取而代之的是 InnoDB innodb_checksums innodb_checksums innodb_checksum_algorithm

innochecksum 命令有助于为指定的测试校验值诊断腐败问题 的表空间 ,而MySQL服务器关闭文件。

MySQL还使用校验和进行复制。 有关详细信息,请参阅配置选项 binlog_checksum master_verify_checksum slave_sql_verify_checksum

另请参见 缓冲池 页面 表空间

儿童表

在一个 外键 关系,一个子表是其行参考(或点)的行与另一个表中与一个特定的列相同的值。 这是包含 FOREIGN KEY ... REFERENCES 子句和可选 ON UPDATE ON DELETE 子句的表。 可以在子表中创建行之前 父表中 的相应行 必须存在。 子表中的值可以阻止对父表执行删除或更新操作,或者可以根据 ON CASCADE 创建外键时使用 选项 在子表中导致自动删除或更新

另请参见 外键 父表

干净的页面

缓冲池中的 一个 页面 其中所有在内存中进行的更改也已写入( 刷新 )到 数据文件中 脏页面 的反面 InnoDB

另请参见 缓冲池 数据文件 脏页 刷新 页面

干净关机

关机 即完成,没有错误,适用所有更改 InnoDB 完成之前的表,而不是一个 崩溃 快速关机 慢关机的 同义词

另请参见 崩溃 快速关闭 关闭 慢速关闭

客户

一种程序,用于将请求发送到 服务器 ,并解释或处理结果。 客户端软件可能只在某些时候运行(例如邮件或聊天程序),并且可能以交互方式运行(例如 mysql 命令处理器)。

另见 mysql server

聚集索引

主键 索引 InnoDB 术语 表存储是根据主键列的值组织的,以加快涉及主键列的查询和排序。 为获得最佳性能,请根据性能最关键的查询仔细选择主键列。 因为修改聚簇索引的列是一项昂贵的操作,所以选择很少或从不更新的主列。 InnoDB

在Oracle数据库产品中,此类表称为 索引组织表

另请参见 索引 主键 二级索引

冷备份

一个 备份 数据库的同时关闭服用。 对于繁忙的应用程序和网站,这可能不实用,您可能更喜欢 热备份 热备份

另请参阅 备份 热备份 热备份

一个内的数据项 的行 ,其存储和语义由数据类型进行定义。 每个 索引 主要由它包含的列集定义。

每列都有一个 基数 值。 列可以是 其表 主键 也可以是 主键 的一部分。 列可以受 唯一约束 NOT NULL约束 或两者 约束 不同列中的值(甚至跨不同的表)可以通过 外键 关系 链接

在讨论MySQL内部操作时,有时将 字段 用作同义词。

另请参见 基数 外键 索引 NOT NULL约束 主键 唯一约束

列索引

单列 索引

另请参见 复合索引 索引

列前缀

当一个 索引 与一个长度规范,诸如创建 CREATE INDEX idx ON t1 (c1(N)) ,仅列值的所述第一N个字符被存储在索引中。 保持索引前缀较小使索引紧凑,内存和磁盘I / O节省有助于提高性能。 (虽然使索引前缀太小可能会阻碍查询优化,因为查询优化器会使重复的行具有不同的值。)

对于包含二进制值或长文本字符串的列,其中排序不是主要考虑因素并且将整个值存储在索引中会浪费空间,索引会自动使用值的前N个(通常为768个)字符进行查找和排序。

另见 索引

承诺

一个 SQL 语句结束的 交易 ,使得永久事务中做任何更改。 它与 回滚 相反 ,它撤消了在事务中所做的任何更改。

InnoDB 使用 乐观 机制进行提交,以便在提交实际发生之前将更改写入数据文件。 这种技术使提交本身更快,并且在回滚的情况下需要做更多的工作。

默认情况下,MySQL使用 自动提交 设置,该设置会在每个SQL语句后自动发出提交。

另请参见 autocommit optimistic rollback SQL transaction

紧凑的行格式

一个 行格式 的InnoDB表。 这是从MySQL 5.0.3到MySQL 5.7.8的默认行格式。 在MySQL 8.0中,默认行格式由 innodb_default_row_format 配置选项 定义 ,其默认设置为 DYNAMIC COMPACT 行格式提供空值和可变长度列比一个更紧凑的表示 冗余 行格式。

有关 InnoDB COMPACT 行格式的 其他信息 ,请参见 第15.10节“InnoDB行格式”

另请参见 动态行格式 文件格式 冗余行格式 行格式

综合指数

包含多个列 索引

另见 索引

压缩备份

MySQL Enterprise Backup 产品 的压缩功能生成 每个表空间的压缩副本,将扩展名更改 .ibd .ibz 通过压缩备份数据,您可以保留更多备份,并缩短将备份传输到其他服务器的时间。 在还原操作期间,数据未压缩。 当压缩备份操作处理已经压缩的表时,它会跳过该表的压缩步骤,因为再次压缩会导致很少或没有空间节省。

MySQL Enterprise Backup 产品 生成的一组文件 ,其中每个 表空间都 被压缩。 压缩文件使用 .ibz 文件扩展名 重命名

在备份过程开始时 应用 压缩 有助于避免压缩过程中的存储开销,并避免在将备份文件传输到另一台服务器时的网络开销。 的过程中 应用 二进制日志 需要更长的时间,并且需要解压缩备份文件。

另请参阅 应用 二进制日志 压缩 热备份 MySQL Enterprise Backup 表空间

压缩行格式

一种 行格式 用于为 启用数据和索引 压缩 InnoDB 大字段存储在远离保存其余行数据的页面的位置,如 动态行格式 索引页面和大字段都被压缩,从而节省了内存和磁盘。 根据数据的结构,内存和磁盘使用量的减少可能会或可能不会超过在使用时解压缩数据的性能开销。 有关 使用详细信息 请参见 第15.9节“InnoDB表和页面压缩”

有关 InnoDB COMPRESSED 行格式的 其他信息 ,请参阅 DYNAMIC行格式

另请参见 压缩 动态行格式 行格式

压缩表

以压缩形式存储数据的表。 因为 InnoDB ,它是一个创建的表 ROW_FORMAT=COMPRESSED 有关 更多信息 请参见 第15.9节“InnoDB表和页面压缩”

另请参见 压缩行格式 压缩

压缩

具有广泛优势的功能包括使用更少的磁盘空间,执行更少的I / O以及使用更少的内存进行缓存。

InnoDB 支持表级和页级压缩。 InnoDB 页面压缩也称为 透明页面压缩 有关 InnoDB 压缩的 更多信息 ,请参见 第15.9节“InnoDB表和页面压缩”

另一种压缩类型是 MySQL Enterprise Backup 产品 压缩备份 功能

另请参见 缓冲池 压缩备份 压缩行格式 DML 透明页面压缩

压缩失败

实际上并不是错误,而是在将 压缩 DML 操作 结合使用 时可能发生的昂贵 操作。 它出现在:对压缩 页面的 更新 溢出保留用于记录修改的页面上的区域; 页面再次压缩,所有更改都应用于表格数据; 重新压缩的数据不适合原始页面,要求MySQL将数据拆分为两个新页面并分别压缩每个页面。 要检查此条件的频率,请查询该 INFORMATION_SCHEMA.INNODB_CMP 表并检查 COMPRESS_OPS 列的值超过该值的值 COMPRESS_OPS_OK 柱。 理想情况下,压缩失败不会经常发生; 当他们这样做,你可以调整 innodb_compression_level innodb_compression_failure_threshold_pct innodb_compression_pad_pct_max 配置选项。

另请参见 compression DML page

连锁索引

请参阅 复合索引

并发

多个操作(在数据库术语, 事务中 )同时运行的能力,而不会相互干扰。 并发性还涉及性能,因为理想情况下,使用有效的 锁定 机制,对多个并发事务的保护以最小的性能开销工作

另请参见 ACID 锁定 事务

配置文件

包含 MySQL在启动时使用 选项 的文件 传统上,在Linux和Unix上,这个文件被命名 my.cnf ,在Windows上它被命名 my.ini 您可以 [mysqld] 在文件部分 下设置与InnoDB相关的许多选项

有关 MySQL搜索配置文件的位置的信息 请参见 第4.2.2.2节“使用选项文件”

当您使用 MySQL Enterprise Backup 产品时,通常使用两个配置文件:一个指定数据的来源以及数据的结构(可能是服务器的原始配置文件),以及仅包含数据的精简配置文件。一小组选项,用于指定备份数据的位置以及结构的方式。 MySQL Enterprise Backup 产品 一起使用的配置文件 必须包含通常不在常规配置文件中的某些选项,因此您可能需要向现有配置文件添加选项以与 MySQL Enterprise Backup一起使用

另请参阅 my.cnf MySQL Enterprise Backup 选项 选项文件

一致阅读

一种读取操作,它使用 快照 信息基于某个时间点显示查询结果,而不管同时运行的其他事务所执行的更改。 如果查询数据已被另一个事务更改,则基于 撤消日志 的内容重建原始数据 此技术 通过强制事务等待其他事务完成 来避免一些 可能降低 并发 性的 锁定 问题

使用 REPEATABLE READ 隔离级别 ,快照基于执行第一次读取操作的时间。 使用 READ COMMITTED 隔离级别,快照将重置为每次一致读取操作的时间。

一致性读取是 READ COMMITTED REPEATABLE READ 隔离级别中的 InnoDB 进程 SELECT 语句 的缺省模式 由于一致读取不会对其访问的表设置任何锁定,因此在对表执行一致读取时,其他会话可以自由修改这些表。

有关适用隔离级别的技术详细信息,请参见 第15.7.2.3节“一致性非锁定读取”

另请参见 并发 隔离级别 锁定 READ COMMITTED REPEATABLE READ 快照 事务 撤消日志

约束

一种自动测试,可以阻止数据库更改以防止数据变得不一致。 (在计算机科学术语中,一种与不变条件相关的断言。)约束是 ACID 哲学的 一个关键组成部分 ,用于保持数据的一致性。 MySQL支持的约束包括 FOREIGN KEY约束 唯一约束

另请参见 ACID 外键 唯一约束

计数器

由特定类型的 InnoDB 操作 递增的值 用于测量服务器的繁忙程度,对性能问题的来源进行故障排除,以及测试更改(例如,配置设置或查询使用的索引)是否具有所需的低级别效果。 通过 Performance Schema 表和 INFORMATION_SCHEMA 可以使用不同类型的计数器 INFORMATION_SCHEMA.INNODB_METRICS

另请参阅 INFORMATION_SCHEMA 度量计数器 性能架构

覆盖指数

包含查询检索的所有列 索引 查询不是使用索引值作为指针来查找完整的表行,而是从索引结构返回值,从而节省磁盘I / O. InnoDB 可以将此优化技术应用于比MyISAM更多的索引,因为 InnoDB 二级索引 还包括 主键 列。 InnoDB 不能将此技术应用于对事务修改的表的查询,直到该事务结束。

给定正确的查询的情况下, 任何 列索引 复合索引 都可以充当覆盖索引。 设计索引和查询以尽可能利用此优化技术。

另请参见 列索引 组合索引 索引 主键 辅助索引

CPU绑定

一种 工作负载 ,其主要 瓶颈 是内存中的CPU操作。 通常涉及读取密集型操作,其中结果都可以缓存在 缓冲池中

另请参见 瓶颈 缓冲池 工作负载

紧急

MySQL使用术语 崩溃 来指代 服务器无法正常清理的 任何意外 关机 操作。 例如,由于数据库服务器计算机或存储设备上的硬件故障,可能发生崩溃; 停电; 潜在的数据不匹配导致MySQL服务器停止; 由DBA发起 快速关闭 ; 或许多其他原因。 InnoDB 的强大自动 崩溃恢复 功能 可确保在重新启动服务器时使数据保持一致,而无需为DBA执行任何额外工作。

另请参阅 崩溃恢复 快速关闭 InnoDB 关闭

崩溃恢复

崩溃 后再次启动MySQL时发生的清理活动 对于 InnoDB 表,使用 重做日志中的 数据重放未完成事务的更改 这是变化 致力于 在飞机坠毁前,但尚未写入到 数据文件 ,从重建 双写缓冲 当数据库正常关闭时,在 清除 操作 期间执行此类活动

在正常操作期间,提交的数据可以在 写入数据文件之前 存储在 更改缓冲区 中一段时间​​。 在保持数据文件是最新的,在正常操作期间引入性能开销以及缓冲数据之间总是存在权衡,这可能使关闭和崩溃恢复需要更长时间。

另请参阅 更改缓冲区 提交 崩溃 数据文件 双写缓冲区 InnoDB 清除 重做日志

CRUD

创建,读取,更新,删除 ”的 缩写 ,是数据库应用程序中的常见操作序列。 通常表示一类具有相对简单的数据库使用的应用程序( SQL中的 基本 DDL DML 查询 语句 ),可以使用任何语言快速实现。

另请参见 DDL DML 查询 SQL

光标

内部数据结构,用于表示 查询 的结果集 或使用SQL WHERE 子句 执行搜索的其他操作 它的工作方式类似于其他高级语言中的迭代器,根据请求从结果集中生成每个值。

尽管SQL通常会为您处理游标处理,但在处理性能关键代码时,您可能会深入研究内部工作。

请参阅 查询

d

数据定义语言

DDL

数据字典

跟踪数据库对象(如 索引 和表 列)的元数据 对于MySQL 8.0中引入的MySQL数据字典,元数据实际上位于 数据库目录 中的 InnoDB 表文件 空间文件中 mysql 对于 InnoDB 数据字典,元数据实际位于 InnoDB 系统表空间中

由于 MySQL Enterprise Backup 产品始终备份 InnoDB 系统表空间,因此所有备份都包含 InnoDB 数据字典 的内容

另请参见 column table-per-table .frm文件 index MySQL Enterprise Backup 系统表空间

数据目录

该目录下的每个MySQL的 情况下 保持 数据文件 InnoDB ,并表示各个数据库的目录。 datadir 配置选项控制。

另请参见 数据文件 实例

数据文件

物理上包含 索引 数据 的文件

InnoDB 系统表 ,它保存 InnoDB 数据字典 和能够保持数据的多个 InnoDB 表,由一个或多个表示的 .ibdata 数据文件。

保存单个 InnoDB 表的 数据的每表文件表空间 .ibd 数据文件 表示

可以保存多个 InnoDB 表的 数据的通用表空间(在MySQL 5.7.6中引入) 也由 .ibd 数据文件 表示

另请参见 数据字典 每表文件 通用表空间 .ibd文件 ibdata文件 索引 系统表空间 表空间

数据操纵语言

DML

数据仓库

主要运行大型 查询的 数据库系统或应用程序 可以以 非规范化 形式 组织只读或读取大部分数据 以提高查询效率。 可以从 MySQL 5.6及更高版本中的 只读事务 的优化中受益 OLTP 对比

另请参见 非规范化 OLTP 查询 只读事务

数据库

在MySQL 数据目录中 ,每个数据库由一个单独的目录表示。 InnoDB 系统表空间 可以保存MySQL 实例中 多个数据库的表数据 ,它保存在 驻留在各个数据库目录之外的 数据文件 中。 文件的每个表的 启用模式时, 的.ibd文件 代表个人InnoDB表存储在数据库目录中,除非使用创建别处 DATA DIRECTORY 条款。 MySQL 5.7.6中引入的常规表空间也在 .ibd文件中 保存表数据 与文件每表 .ibd文件不同 ,通用表空间 .ibd文件 可以保存MySQL 实例中 多个数据库的表数据 ,并且可以分配给相对于MySQL数据目录或独立于MySQL数据目录的目录。

对于长期使用MySQL的用户来说,数据库是一个熟悉的概念。 来自Oracle数据库背景的用户会发现数据库的MySQL含义更接近Oracle数据库调用的 模式

另请参阅 数据文件 文件的每个表 的.ibd文件 例如 架构 系统表空间

DCL

数据控制语言,一组 用于管理权限 SQL 语句。 在MySQL中,由 GRANT REVOKE 语句组成。 DDL DML 对比

另请参见 DDL DML SQL

DDL

数据定义语言,一组 用于操作数据库本身而不是单个表行 SQL 语句。 包括所有形式的的 CREATE ALTER DROP 语句。 还包括 TRUNCATE 声明,因为它 声明的工作方式不同 ,即使最终效果相似。 DELETE FROM table_name

DDL语句自动 提交 当前 事务 ; 他们无法 回滚

InnoDB 在线DDL 功能增强了性能 CREATE INDEX DROP INDEX 以及多种类型的 ALTER TABLE 操作。 有关 更多信息 请参见 第15.12节“InnoDB和在线DDL” 此外, InnoDB 每表文件 设置可能会影响 DROP TABLE TRUNCATE TABLE 操作 的行为

DML DCL 对比

另请参阅 commit DCL DML 每表文件 回滚 SQL 事务

僵局

不同 事务 无法继续的情况,因为每个 事务 都持有 另一个需要 因为两个事务都在等待资源变得可用,所以它们都不会释放它所拥有的锁。

当事务锁定多个表中的行(通过诸如 UPDATE 或之类的 语句 SELECT ... FOR UPDATE ),但顺序相反 时,可能会发生死锁 当这样的语句锁定索引记录和 间隙的 范围时,也会发生死锁 ,每个事务由于时序问题而获取某些锁而不是其他锁。

有关如何自动检测和处理死锁的背景信息,请参见 第15.7.5.2节“死锁检测和回滚” 有关避免和从死锁条件中恢复的提示,请参见 第15.7.5.3节“如何最小化和处理死锁”

另见 gap lock transaction

死锁检测

一种机制,可自动检测何时发生 死锁 ,并自动 回滚 其中一个 事务 受害者 )。 可以使用 innodb_deadlock_detect 配置选项 禁用死锁检测

另请参见 死锁 回滚 事务 受害者

删除

InnoDB 处理一个 DELETE 声明,该行立即被标记为删除并不再被查询返回的。 在称为 清除 操作 的定期垃圾收集期间,稍后将回收存储 为了删除大量数据,具有自己的性能特征的相关操作是 TRUNCATE DROP

另请参见 drop purge truncate

删除缓冲

DELETE 操作 产生的二级索引页 更改存储 更改缓冲区中 而不是立即写入更改的技术,以便可以执行物理写入以最小化随机I / O. (因为删除操作分为两步,所以此操作会缓冲通常标记为删除索引记录的写入。)它是 更改缓冲 的类型之一 ; 其他是 插入缓冲 清除缓冲

另请参阅 更改缓冲区 更改缓冲 插入缓冲区 插入缓冲 清除缓冲

非规范化

一种数据存储策略,它跨不同的表复制数据,而不是将表与 外键 连接 查询相关联。 通常用于 数据仓库 应用程序,其中数据在加载后不会更新。 在此类应用程序中,查询性能比在更新期间维护一致数据更简单更重要。 标准化 对比

另请参见 数据仓库 外键 连接 规范化

下降指数

一种 索引 类型, 其中索引存储被优化以处理 子句。 ORDER BY column DESC

另见 索引

字典对象缓存

字典对象缓存将先前访问的 数据字典 对象存储在存储器中以使对象重用并最小化磁盘I / O. 基于 LRU 的驱逐策略用于从存储器中驱逐最近最少使用的对象。 缓存由几个存储不同对象类型的分区组成。

有关更多信息,请参见 第14.4节“字典对象高速缓存”

请参见 数据字典 LRU

脏页

一个 页面 InnoDB 缓冲池 已在内存中,这里的变化没有写被更新( 刷新 )的 数据文件 干净页面 相反

另请参见 缓冲池 清理页面 数据文件 刷新 页面

脏读

检索不可靠数据的操作,由另一个事务更新但尚未 提交的数据 只有 隔离级别 称为 read uncommitted 才有可能

这种操作不符合 ACID 数据库设计原则。 它被认为是非常危险的,因为数据可以 在提交之前 回滚 或更新; 然后,执行脏读的事务将使用从未确认为准确的数据。

它的反面是 一致读取 InnoDB 确保事务不会读取由另一个事务更新的信息,即使其他事务同时提交也是如此。

另请参见 ACID 提交 一致性读取 隔离级别 READ UNCOMMITTED 回滚

基于磁盘的

一种主要在磁盘存储上组织数据的数据库(硬盘驱动器或等效驱动器)。 数据在磁盘和存储器之间来回传递以进行操作。 它与 内存数据库 相反 虽然它 InnoDB 是基于磁盘的,但它还包含诸如 缓冲池 ,多个缓冲池实例和 自适应哈希索引等功能 ,这些功能允许某些类型的工作负载主要从内存中工作。

另请参见 自适应哈希索引 缓冲池 内存数据库

磁盘绑定

一种 工作负载 ,其主要 瓶颈 是磁盘I / O. (也称为 I / O绑定 。)通常涉及频繁写入磁盘,或随机读取的数据超出 缓冲池的数量

另请参见 瓶颈 缓冲池 工作负载

DML

数据操纵语言,一组 SQL 执行语句 INSERT UPDATE DELETE 操作。 SELECT 声明有时被认为是一个DML语句,因为 SELECT ... FOR UPDATE 形式是受到了同样的考虑 锁定 INSERT UPDATE DELETE

InnoDB 表的 DML语句 事务 的上下文中操作 ,因此它们的效果可以 作为单个单元 提交 回滚

DDL DCL形成 对比

另请参阅 commit DCL DDL 锁定 回滚 SQL 事务

文件ID

InnoDB 全文搜索 功能中,表中包含 FULLTEXT索引 的特殊列 ,用于唯一标识与每个 ilist 关联的文档 它的名字是 FTS_DOC_ID (需要大写)。 列本身必须是 BIGINT UNSIGNED NOT NULL 类型,具有唯一的索引名称 FTS_DOC_ID_INDEX 最好在创建表时定义此列。 如果 InnoDB 必须在创建 FULLTEXT 索引 时将列添加到表中 ,则索引操作要贵得多。

另请参见 全文搜索 FULLTEXT索引 ilist

双写缓冲区

InnoDB 使用称为doublewrite的文件刷新技术。 在写之前 的页面 数据文件 InnoDB 第一次将它们写入称为双写缓冲区中的连续区域。 只有在写入和刷新到doublewrite缓冲区之后,才会 InnoDB 将页面写入数据文件中的正确位置。 如果 在页面写入过程中 存在操作系统,存储子系统或 mysqld 进程崩溃,则 InnoDB 可以在 崩溃恢复 期间从doublewrite缓冲区中找到该页面的良好副本

尽管数据总是写入两次,但双写缓冲区不需要两倍的I / O开销或两倍的I / O操作。 数据作为一个大的顺序块写入缓冲区本身,只需一次 fsync() 调用操作系统。

要关闭doublewrite缓冲区,请指定该选项 innodb_doublewrite=0

另请参阅 崩溃恢复 数据文件 页面 清除

下降

一种 通过诸如 或之 类的 语句 删除模式对象 DDL 操作 它在内部映射到一个 语句。 从一个 角度来看,这些操作的性能考虑涉及 数据字典 被锁定 的时间, 以确保相互关联的对象全部更新,以及更新内存结构(如 缓冲池)的时间 对于 ,drop操作与 truncate 操作( 语句) 有一些不同的特性 DROP TABLE DROP INDEX ALTER TABLE InnoDB TRUNCATE TABLE

另请参见 缓冲池 数据字典 DDL truncate

动态行格式

一个 InnoDB 行格式。 由于长的可变长度列值存储在保存行数据的页面之外,因此对于包含大对象的行非常有效。 由于通常不访问大字段来评估查询条件,因此它们不会 经常 进入 缓冲池 ,从而导致更少的I / O操作和更好的缓存内存利用率。

从MySQL 5.7.9开始,默认行格式由 innodb_default_row_format ,其默认值为 DYNAMIC

有关 InnoDB DYNAMIC 行格式的 其他信息 ,请参阅 DYNAMIC行格式

另请参见 缓冲池 文件格式 行格式

Ë

早期采用者

类似于 beta的阶段 ,通常在非关键任务设置中评估软件产品的性能,功能和兼容性。

另见 beta

错误日志

一种 日志, 显示有关MySQL启动和关键运行时错误以及 崩溃 信息的信息。 有关详细信息,请参见 第5.4.2节“错误日志”

另见 crash log

赶出

从缓存或其他临时存储区域(例如 InnoDB 缓冲池) 中删除项目的过程 通常(但并非总是)使用 LRU 算法来确定要删除的项目。 驱逐 脏页时 ,其内容将 刷新 到磁盘,并且 也可能刷新 任何脏 邻居页面

另请参见 缓冲池 脏页 刷新 LRU 邻居页面

独家锁

A类 ,以防止任何其他 交易 从锁定同一行。 根据事务 隔离级别 ,这种锁可能会阻止其他事务写入同一行,或者也可能阻止其他事务读取同一行。 默认 InnoDB 隔离级别 REPEATABLE READ 通过允许事务读取具有独占锁的行来 实现更高的 并发性 ,这种技术称为 一致读取

另请参见 并发 一致性读取 隔离级别 锁定 REPEATABLE READ 共享锁定 事务

程度

一组 页面 一个内 对于 16KB 的默认 页面大小 ,范围包含64页。 在MySQL 5.6中, InnoDB 实例 的页面大小 可以是4KB,8KB或16KB,由 innodb_page_size 配置选项 控制 对于4KB,8KB和16KB页面大小,扩展区大小始终为1MB(或1048576字节)。

InnoDB MySQL 5.7.6中增加了 对32KB和64KB 页面大小的 支持 对于32KB的页面大小,范围大小为2MB。 对于64KB的页面大小,范围大小为4MB。

InnoDB 功能,如 预读 请求和 双写缓冲器 使用I / O操作读,写,分配,或在一个时间免费数据的一个程度。

另请参见 doublewrite buffer page page size read-ahead segment tablespace

F

.frm文件

包含MySQL表的元数据(如表定义)的文件。 .frm 在MySQL 8.0中删除了文件,但仍在早期的MySQL版本中使用。 在MySQL 8.0中,先前存储在 .frm 文件中的 数据 存储在 数据字典 表中。

另请参见 数据字典 MySQL Enterprise Backup 系统表空间

快速创建索引

InnoDB插件中首次引入的功能,现在是5.5及更高版本的MySQL的一部分,可以 通过避免完全重写相关表 来加速 InnoDB 二级索引 创建 加速也适用于删除二级索引。

由于索引维护可能会增加许多数据传输操作的性能开销,因此请考虑执行诸如 ALTER TABLE ... ENGINE=INNODB INSERT INTO ... SELECT * FROM ... 不执行任何二级索引的操作,然后再创建索引。

在MySQL 5.6中,此功能变得更加通用。 您可以在创建索引时读取和写入表,并且 ALTER TABLE 可以在不复制表的情况下执行 更多种类的 操作,而不会阻止 DML 操作,或两者兼而有之。 因此,在MySQL 5.6及更高版本中,这组功能称为 在线DDL, 而不是快速索引创建。

有关相关信息,请参阅 InnoDB快速索引创建 第15.12节“InnoDB和在线DDL”

另请参见 DML 索引 在线DDL 二级索引

快速关机

默认 关闭 过程 InnoDB ,基于配置设置 innodb_fast_shutdown=1 为了节省时间, 跳过 某些 刷新 操作。 这种类型的关闭在正常使用期间是安全的,因为刷新操作在下次启动期间执行,使用与 崩溃恢复中 相同的机制 如果数据库正在关闭以进行升级或降级,请执行 慢速关闭, 以确保 在关闭期间对 数据文件 应用所有相关更改

另请参阅 崩溃恢复 数据文件 刷新 关闭 慢速关闭

文件格式

InnoDB 表格 的文件格式

另请参见 file-per-table .ibd文件 ibdata文件 行格式

文件的每个表

innodb_file_per_table 选项 控制的设置的通用名称 ,这是影响 InnoDB 文件存储,功能可用性和I / O特性 方面的重要配置选项 从MySQL 5.6.7开始, innodb_file_per_table 默认启用。

innodb_file_per_table 启用 选项后,您可以在其自己的 .ibd文件中 创建表, 而不是在 系统表空间 的共享 ibdata文件 中创建 当表数据存储在单个 .ibd文件中时 ,您可以更灵活地选择 数据 压缩 等功能所需的 行格式 操作也更快,并且回收的空间可以由操作系统使用而不是保持保留 TRUNCATE TABLE InnoDB

MySQL企业备份 产品是那些在自己的文件表的更灵活。 例如,可以从备份中排除表,但仅限于它们位于单独的文件中。 因此,此设置适用于较少备份或不同计划的表。

另请参见 压缩行格式 压缩 文件格式 .ibd文件 ibdata文件 innodb_file_per_table MySQL Enterprise Backup 行格式 系统表空间

填充因子

在一个 InnoDB 索引 ,一个比例 页面 被页面之前采取了由索引数据被分割。 索引数据首先在页面之间划分时未使用的空间允许使用更长的字符串值更新行,而无需昂贵的索引维护操作。 如果填充因子太低,索引会占用比所需更多的空间,从而在读取索引时会产生额外的I / O开销。 如果填充因子太高,任何增加列值长度的更新都可能导致索引维护的额外I / O开销。 有关 更多信息 请参见 第15.6.2.2节“InnoDB索引的物理结构”

另见 索引 页面

固定行格式

此行格式由 MyISAM 存储引擎使用,而不是由 InnoDB 如果 InnoDB 使用 ROW_FORMAT=FIXED MySQL 5.7.6或更早版本中 的选项 创建 表,则 InnoDB 使用 紧凑行格式 ,尽管该 FIXED 值仍可能显示在输出(如 SHOW TABLE STATUS 报表)中。 从MySQL 5.7.7开始, InnoDB 如果 ROW_FORMAT=FIXED 指定 则返回错误

另请参见 紧凑行格式 行格式

红晕

将更改写入已在内存区域或临时磁盘存储区域中缓冲的数据库文件。 InnoDB 定期刷新 存储结构包括 重做日志 撤消日志 缓冲池

刷新可能是因为内存区域已满并且系统需要释放一些空间,因为 提交 操作意味着可以最终确定事务的更改,或者因为 慢速关闭 操作意味着应该最终完成所有未完成的工作。 如果一次刷新所有缓冲数据并不重要, InnoDB 可以使用一种称为 模糊检查点 的技术 来刷新小批量页面以分散I / O开销。

另请参见 缓冲池 提交 模糊检查点 重做日志 慢速关闭 撤消日志

刷新清单

内部 InnoDB 跟踪数据结构 脏页 缓冲池 :那就是, 网页 已更改,并需要写回到磁盘。 此数据结构经常由 InnoDB 内部 小型事务 更新 ,因此受其自身的 互斥锁 保护, 以允许并发访问缓冲池。

请参阅 缓冲池 脏页 LRU 迷你事务 互斥 页面 页面清理

外键

一种指针关系,位于不同 InnoDB 表中的 行之间 外键关系在 父表 子表中的 一列上定义

除了能够快速查找相关信息外,外键还可以 防止这些指针在插入,更新和删除数据时变为无效,从而 有助于强制 引用完整性 此强制机制是一种 约束 如果另一个表中不存在关联的外键值,则无法插入指向另一个表的行。 如果删除了一行或更改了其外键值,并且另一个表中的行指向该外键值,则可以设置外键以防止删除,从而导致另一个表中的相应列值变为 null ,或自动删除另一个表中的相应行。

设计 规范化 数据库的 一个阶段 是识别复制的数据,将数据分成新表,并设置外键关系,以便可以使用 连接 操作 像单个表一样查询多个表

另请参见 子表 FOREIGN KEY约束 连接 规范化 NULL 父表 参照完整性 关系

FOREIGN KEY约束

通过 外键 关系 维护数据库一致性 约束 类型 与其他类型的约束一样,如果数据不一致,它可以防止数据被插入或更新; 在这种情况下,防止的不一致是在多个表中的数据之间。 或者,在执行 DML 操作 约束可以 根据 创建外键时指定 选项 导致 子行中的 数据 被删除,更改为不同的值或设置为 null FOREIGN KEY ON CASCADE

另请参见 子表 约束 DML 外键 NULL

FTS

在大多数情况下, 全文搜索 的首字母缩写 有时在性能讨论中, 全表扫描 的首字母缩写

另请参见 全表扫描 全文搜索

完整备份

一个 备份 ,包括 每个MySQL 数据库中的 所有 ,以及MySQL 实例中的 所有数据库 部分备份 对比

另请参见 备份 数据库 实例 部分备份

全表扫描

需要读取表的全部内容而不是仅使用 索引 选择的部分的操作 通常使用小型查找表执行,或者在具有大型表的数据仓库情况下执行,其中聚合和分析所有可用数据。 这些操作发生的频率以及表相对于可用内存的大小对查询优化和管理 缓冲池中 使用的算法有影响

索引的目的是允许在大表中查找特定值或值范围,从而在实际时避免全表扫描。

另请参见 缓冲池 索引

全文检索

MySQL功能用于在表数据中查找单词,短语,单词的布尔组合等,比使用SQL LIKE 运算符或编写自己的应用程序级搜索算法 更快,更方便,更灵活 它使用SQL函数 MATCH() FULLTEXT索引

另请参见 FULLTEXT索引

FULLTEXT指数

在MySQL 全文搜索 机制 中保存 搜索索引 的特殊 索引 表示列值的单词,省略任何指定为 停用 词的单词 最初,仅适用于 桌子。 从MySQL 5.6.4开始,它也可用于 InnoDB 表。 MyISAM

另请参见 全文搜索 索引 InnoDB 搜索索引 停用词

模糊检查点

一种 缓冲池中 刷新 小批量 脏页的 技术 ,而不是一次刷新所有脏页,这会破坏数据库处理。

另请参见 缓冲池 脏页 刷新

G

GA

一般可用 ,即软件产品出现 测试阶段 并可供销售,官方支持和生产使用的阶段。

另见 beta

间隙

在A地点 InnoDB 索引 数据结构,其中新值可以被插入。 使用诸如的语句锁定一组行时 SELECT ... FOR UPDATE InnoDB 可以创建应用于间隙的锁以及索引中的实际值。 例如,如果为更新选择了大于10的所有值,则间隙锁定会阻止另一个事务插入大于10的新值。 上级记录 下划线记录 表示包含大于或小于所有值的所有值的间隙。当前指数值。

另请参见 并发 间隙锁定 索引 最小记录 隔离级别 supremum记录

差距锁定

一个 缺口 之前的第一间隙或最后索引记录后锁定索引记录之间,或。 例如, SELECT c1 FROM t WHERE c1 BETWEEN 10 and 20 FOR UPDATE; 阻止其他事务将值15插入列中 t.c1 ,无论 中是否已存在任何此类值,因为该范围内所有现有值之间的间隙都已锁定。 记录锁定 下一键锁定 对比

差距锁是性能和 并发 之间权衡的一部分, 用于某些事务 隔离级别 而不是其他 级别

另请参见 gap infimum record lock next-key lock record lock supremum record

一般日志

请参阅 常规查询日志

一般查询日志

一种 用于诊断和排除MySQL服务器处理的SQL语句 日志 可以存储在文件或数据库表中。 您必须通过 general_log 配置选项 启用此功能 才能使用它。 您可以通过 sql_log_off 配置选项 为特定连接禁用它

记录比 慢查询日志 更广泛的查询 用于复制 二进制日志 不同 ,通用查询日志包含 SELECT 语句,并且不保持严格的排序。 有关更多信息,请参见 第5.4.3节“常规查询日志”

另请参见 二进制日志 日志 慢查询日志

一般表空间

使用 语法 创建 的共享 InnoDB 表空间 CREATE TABLESPACE 一般表空间可以在MySQL数据目录之外创建,能够保存多个 ,并支持所有行格式的表。 MySQL 5.7.6中引入了一般表空间。

使用 语法 将表添加到常规表空间 CREATE TABLE tbl_name ... TABLESPACE [=] tablespace_name ALTER TABLE tbl_name TABLESPACE [=] tablespace_name

系统表空间 每表文件表 空间 对比

有关更多信息,请参见 第15.6.3.3节“常规表空间”

另请参见 file-per-table 系统表空间 表空间

生成列

一列,其值是根据列定义中包含的表达式计算的。 生成的列可以是 虚拟的 存储的

另请参见 基本列 存储生成的列 虚拟生成的列

生成存储列

请参见 存储生成的列

生成虚拟列

请参见 虚拟生成列

全局临时表空间

一个 临时表空间 ,用于存储 对用户创建的临时表所做更改的 回滚段

另请参见 临时表空间

全球交易

XA 操作中 涉及的 一种 事务 它由几个本身具有事务性的操作组成,但所有操作必须作为一个组成功完成,或者全部作为一个组回滚。 从本质上讲,这会将 ACID 属性 扩展 到一个级别 ”, 这样多个ACID事务就可以作为具有ACID属性的全局操作的组件一起执行。

另请参见 ACID 事务 XA

小组提交

InnoDB 对一组 提交 操作执行 一次低级I / O操作(日志写入) 优化 ,而不是为每次提交单独刷新和同步。

另请参见 二进制日志 提交

H

哈希索引

一种 索引, 用于使用相等运算符的查询,而不是范围运算符,例如大于或 BETWEEN 它适用于 MEMORY 桌子。 尽管 MEMORY 由于历史原因, 哈希索引是 的默认值 ,但该存储引擎还支持 B树 索引,这对于通用查询来说通常是更好的选择。

MySQL包含此索引类型的变体,即 自适应哈希索引 InnoDB 如果需要 ,它将 根据运行时条件 自动构建

另请参见 自适应哈希索引 B树 索引 InnoDB

硬盘

硬盘驱动器 ”的 缩写 指使用旋转盘片的存储介质,通常在与 SSD 进行比较和对比时 其性能特征可以影响 基于磁盘的 工作负载 的吞吐量

另请参阅 基于磁盘的 SSD

心跳

发送的周期性消息,指示系统正常运行。 复制 上下文中,如果 主服务器 停止发送此类消息,则其中一个 从服务器 可以取代它。 可以在群集环境中的服务器之间使用类似的技术来确认所有这些技术都正常运行。

另请参见 主服务器 复制

高水位线

表示上限的值,可以是运行时不应超过的硬限制,也可以是实际达到的最大值的记录。 低水位 对比

另见 低水位线

历史清单

具有删除标记记录 事务 列表, 计划由 InnoDB 清除 操作处理。 记录在 撤消日志中 命令报告历史列表的长度 SHOW ENGINE INNODB STATUS 如果历史列表的长度超过 innodb_max_purge_lag 配置选项 的值,则 每个 DML 操作都会稍微延迟,以允许清除操作完成 刷新 已删除的记录。

也称为 吹扫滞后

另请参阅 DML flush purge purge lag 回滚段 事务 撤消日志

打孔

从页面释放空块。 InnoDB 透明的页面压缩 功能依赖于打孔支持。 有关更多信息,请参见 第15.9.2节“InnoDB页面压缩”

另请参见 稀疏文件 透明页面压缩

如此频繁地访问行,表或内部数据结构,需要某种形式的锁定或互斥的情况,这会导致性能或可伸缩性问题。

虽然 通常表示不良情况,但 热备份 是首选的备份类型。

另请参阅 热备份

热备份

在数据库运行且应用程序正在读取和写入数据库时​​进行备份。 备份不仅仅是复制数据文件:它必须包括备份过程中插入或更新的任何数据; 它必须排除备份过程中删除的任何数据; 它必须忽略任何未提交的更改。

执行热备份的Oracle产品, InnoDB 尤其是表, MyISAM 以及 来自 其他存储引擎的 ,称为 MySQL Enterprise Backup

热备份过程包括两个阶段。 初始复制数据文件会产生 原始备份 申请 步整合到同时备份运行所发生的任何改变。 应用更改会生成 准备好的 备份; 这些文件随时可以恢复。

另请参阅 apply MySQL Enterprise Backup 准备备份 原始备份

一世

.ibd文件

每个表文件表 空间和一般表空间 的数据文件 每个表的 .ibd 文件 表空间 文件包含一个表和关联的索引数据。 常规表空间 .ibd 文件可能包含多个表的表和索引数据。

.ibd 文件的扩展名不适用于 系统表空间 ,它由一个或多个 ibdata文件

如果使用该 DATA DIRECTORY = 子句 创建了每表文件表空间或通用表空间 ,则该 .ibd 文件位于正常数据目录之外的指定路径中。

MySQL Enterprise Backup 产品 .ibd 文件包含在压缩备份中时 ,压缩的等效 文件 是一个 文件。 .ibz

另请参见 数据库 每个表的文件 常规表空间 ibdata文件 .ibz文件 innodb_file_per_table MySQL Enterprise Backup 系统表空间

.ibz文件

MySQL企业备份 产品进行 压缩备份 ,它把每个 正在使用该创建的文件 的文件每个表 从设置 .ibd 扩展到一个 .ibz 扩展。

备份期间应用的压缩不同于 在正常操作期间保持表数据压缩 压缩行格式 压缩备份操作会跳过已经处于压缩行格式的表空间的压缩步骤,因为第二次压缩会减慢备份速度,但几乎不会节省空间。

另请参阅 压缩备份 压缩行格式 文件的每个表 的.ibd文件 MySQL企业备份 表空间

I / O密集型

请参阅 磁盘绑定

ib文件集

InnoDB MySQL数据库 管理的文件集 系统表空间 表文件 空间文件和 重做日志 文件。 根据MySQL版本和 InnoDB 配置,还可能包括 常规表空间 临时表空间 撤消表空间 文件。 该术语有时用于详细讨论 InnoDB 文件结构和格式,以引用 InnoDB MySQL数据库中 管理的文件集

另请参见 数据库 每表文件 常规表空间 重做日志 系统表空间 临时表空间 撤消表空间

ibbackup_logfile

热备份 操作 期间 MySQL Enterprise Backup 产品 创建的补充备份文件 它包含有关备份运行时发生的任何数据更改的信息。 初始备份文件(包括 )称为 原始备份 ,因为备份操作期间发生的更改尚未合并。 对原始备份文件 执行 应用 步骤 ,生成的文件会包含最终的数据更改,并称为 准备备份 在此阶段, 不再需要 文件。 ibbackup_logfile ibbackup_logfile

另请参阅 apply 热备份 MySQL Enterprise Backup 准备备份 原始备份

ibdata文件

构成InnoDB 系统表空间的 一组文件,其名称如 ibdata1 ibdata2 等等 这些文件包含有关 表的 元数据 数据字典 ),以及一个或多个 撤消日志 更改缓冲区 双写缓冲区 的存储区域 它们还可以包含部分或全部表数据(取决于 创建每个表时每个表 文件 模式是否有效)。 innodb_file_per_table时 InnoDB InnoDB 选项已启用,新创建的表的数据和索引存储在单独的 .ibd文件中, 而不是 存储在 系统表空间中。

ibdata 文件 的增长 innodb_autoextend_increment 配置选项的 影响

另请参阅 更改缓冲区 数据字典 双写缓存 文件的每个表 的.ibd文件 innodb_file_per_table 系统表空间 撤消日志

ibtmp文件

非压缩 临时表 和相关对象 InnoDB 临时表空间 数据文件 配置文件选项 允许用户定义临时表空间数据文件的相对路径。 如果 未指定,则默认行为是 在数据目录中 创建一个自动扩展的12MB数据文件 InnoDB innodb_temp_data_file_path innodb_temp_data_file_path ibtmp1 ibdata1

另请参见 数据文件 临时表 临时表空间

ib_logfile

一组文件,通常命名为 ib_logfile0 ib_logfile1 ,形成了 重做日志 有时也称为 日志组 这些文件记录了尝试更改 InnoDB 表中 数据的语句 在崩溃后启动时,会自动重播这些语句以更正由不完整事务写入的数据。

此数据不能用于手动恢复; 对于该类型的操作,请使用 二进制日志

另请参见 二进制日志 日志组 重做日志

i列表

InnoDB FULLTEXT索引中 ,数据结构由文档ID和令牌的位置信息(即特定单词)组成。

另请参见 FULLTEXT索引

隐式行锁

InnoDB 获取 的行锁, 以确保一致性,而无需您特别请求它。

另请参见 行锁定

内存数据库

一种数据库系统,用于维护内存中的数据,以避免因磁盘I / O和磁盘块与内存区域之间的转换而产生的开销。 一些内存数据库牺牲耐性( d ACID 的设计理念),并很容易受到硬件,电力和其他类型的故障,使它们更适合于只读操作。 其他内存数据库确实使用持久性机制,例如将更改记录到磁盘或使用非易失性内存。

MySQL功能可以解决相同类型的内存密集型处理,包括 InnoDB 缓冲池 自适应哈希索引 只读事务 优化, MEMORY 存储引擎, MyISAM 密钥缓存和MySQL查询缓存。

另请参见 ACID 适应性的散列索引 缓冲池 基于磁盘的 只读的事务

增量备份

MySQL Enterprise Backup 产品 执行的 一种 热备份 仅保存自某个时间点以来更改的数据。 通过完整备份和一系列增量备份,您可以长时间重建备份数据,而无需保留多个完整备份的存储开销。 您可以还原完整备份,然后连续应用每个增量备份,也可以通过将每个增量备份应用到备份来使最新备份保持最新,然后执行单个还原操作。

已更改数据的粒度位于 页面 级别。 页面实际上可能涵盖多行。 每个更改的页面都包含在备份中。

另请参阅 热备份 MySQL企业备份 页面

指数

一种数据结构 ,通常通过形成 表示特定 集的 所有值的 树结构( B树) ,为 表的 提供快速查找功能

InnoDB 表始终具有 表示 主键 聚簇索引 它们还可以 在一列或多列上定义 一个或多个 二级索引 根据其结构,二级索引可以分为 部分 索引 索引 复合 索引。

索引是 查询 性能 的关键方面 数据库架构师设计表,查询和索引,以允许快速查找应用程序所需的数据。 理想的数据库设计 在可行的情况下 使用 覆盖索引 ; 查询结果完全从索引计算,而不读取实际的表数据。 每个 外键 约束还需要一个索引,以有效地检查 表中 是否存在值

虽然B树索引是最常见的,不同种类的数据结构的用于 散列索引 ,如在 MEMORY 存储引擎和 InnoDB 自适应散列索引 R树 索引用于多维信息的空间索引。

另请参见 自适应哈希索引 B树 子表 聚簇索引 列索引 组合索引 覆盖索引 外键 哈希索引 父表 部分索引 主键 查询 R树 二级索引

索引缓存

保存用于 InnoDB 全文搜索 的令牌数据的内存区域 它缓冲数据时数据被插入或在是的一部分列更新以最小化磁盘I / O FULLTEXT索引 当索引缓存已满时,令牌数据将写入磁盘。 每个 InnoDB FULLTEXT 索引都有自己独立的索引缓存,其大小由配置选项控制 innodb_ft_cache_size

另请参阅 全文搜索 FULLTEXT索引

指数条件下推

索引条件下推(ICP)是一种优化, WHERE 如果可以使用 索引中的 字段评估条件的某些部分,则将部分条件下推到存储引擎 ICP可以减少 存储引擎 必须访问基表的次数以及MySQL服务器必须访问存储引擎的次数。 有关更多信息,请参见 第8.2.1.5节“索引条件下推优化”

另请参见 索引 存储引擎

索引提示

用于覆盖 优化程序建议 索引的 扩展SQL语法 例如, FORCE INDEX USE INDEX ,和 IGNORE INDEX 条款。 通常在索引列具有不均匀分布的值时使用,导致 基数 估计 不准确

另请参见 基数 索引

索引前缀

应用于多个列 索引 (称为 复合索引 )中, 索引 的初始列或前导列。 引用复合索引的前1,2,3等列的查询可以使用索引,即使查询未引用索引中的所有列也是如此。

另请参见 复合索引 索引

指数统计

统计

最低记录

伪记录 索引 ,表示 间隙 在该索引以下的最小值。 如果事务具有诸如的语句 SELECT ... FROM ... WHERE col < 10 FOR UPDATE; ,并且该列中的最小值为5,则它是对最小记录的锁定,其阻止其他事务插入甚至更小的值,例如0,-10等。

另请参见 gap index 伪记录 supremum记录

INFORMATION_SCHEMA

提供MySQL 数据字典 查询接口 数据库 的名称 (此名称由ANSI SQL标准定义。)要检查有关数据库的信息(元数据),可以查询诸如 和之类的 ,而不是使用 生成非结构化输出的命令。 INFORMATION_SCHEMA.TABLES INFORMATION_SCHEMA.COLUMNS SHOW

INFORMATION_SCHEMA 数据库还包含特定于 InnoDB的 表,这些表 InnoDB 数据字典 提供查询接口 您可以使用这些表来查看数据库的结构,而不是获取有关 InnoDB 的工作方式的实时信息, 以帮助进行性能监视,调整和故障排除。

请参见 数据字典 数据库 InnoDB

InnoDB的

一种MySQL组件,它结合了高性能和 事务 功能,可靠性,健壮性和并发访问。 它体现了 ACID的 设计理念。 代表作为 存储引擎 ; 它处理使用该 ENGINE=INNODB 子句 创建或更改的表 有关 架构详细信息和管理过程, 请参见 第15章, InnoDB存储引擎 ; 有关性能建议 请参见 8.5节“优化InnoDB表”

在MySQL 5.5及更高版本中, InnoDB 是新表的默认存储引擎,并且 ENGINE=INNODB 不需要 子句。

InnoDB 表非常适合 热备份 有关 用于备份MySQL服务器而不中断正常处理 MySQL Enterprise Backup 产品的 信息 请参见 第30.2节“MySQL企业备份概述”

另请参阅 ACID 热备份 MySQL企业备份 存储引擎 事务

innodb_autoinc_lock_mode

innodb_autoinc_lock_mode 选项控制用于 自动增量锁定 的算法 如果有自动递增 主键 ,则只能使用基于语句的复制设置 innodb_autoinc_lock_mode=1 此设置称为 连续 锁定模式,因为事务中的多行插入会接收连续的自动增量值。 如果您具有 innodb_autoinc_lock_mode=2 允许插入操作的更高并发性,则使用基于行的复制而不是基于语句的复制。 此设置称为 交错 锁定模式,因为同时运行的多个多行插入语句可以接收 交错的 自动增量 值。 innodb_autoinc_lock_mode=0 除兼容性目的外,不应使用 该设置

连续锁定模式( innodb_autoinc_lock_mode=1 )是MySQL 8.0.3之前的默认设置。 从MySQL 8.0.3开始,交错锁定模式( innodb_autoinc_lock_mode=2 )是默认值,它反映了从基于语句的复制到基于行的复制的更改作为默认复制类型。

另请参见 自动递增 自动递增锁定 混合模式插入 主键

innodb_file_per_table

一个重要的配置选项,它影响 InnoDB 文件存储的 许多方面 ,功能的可用性和I / O特性。 在MySQL 5.6.7及更高版本中,默认情况下启用它。 innodb_file_per_table 选项打开 每表文件 模式。 启用此模式后,新创建的 InnoDB 表和关联的索引可以存储在 系统表空间 外的 每个表的 .ibd文件中

此选项会影响许多SQL语句的性能和存储注意事项,例如 DROP TABLE TRUNCATE TABLE

启用该 innodb_file_per_table 选项可以利用 MySQL Enterprise Backup中的 压缩 和命名表备份等功能

有关更多信息,请参见 innodb_file_per_table 第15.6.3.2节“每个表的文件表空间”

另请参阅 压缩 文件的每个表 的.ibd文件 MySQL企业备份 系统表空间

innodb_lock_wait_timeout

innodb_lock_wait_timeout 选项在 等待 共享资源变为可用,或放弃和处理错误,重试或在应用程序中执行备用处理 之间设置平衡 回滚任何 InnoDB 等待超过指定时间的事务以获取 锁定 如果 死锁 是由对不同存储引擎控制的多个表的更新引起的, 则特别有用 ; 不会 自动 检测到 此类死锁

另请参见 死锁 死锁检测 锁定 等待

innodb_strict_mode

innodb_strict_mode 选项控制是否 InnoDB 严格模式运行 ,其中通常被视为警告的条件会导致错误(并且基础语句失败)。

另见 严格模式

插入

SQL 中的主要 DML 操作之一 插入的性能是将 数百万行加载到表 中的 数据仓库 系统 的关键因素 ,以及 许多并发连接可能以任意顺序将行插入同一表的 OLTP 系统。 如果插入性能对您很重要,您应该了解 InnoDB 功能,例如 更改缓冲中 使用 插入缓冲区 自动增量 列。

另请参见 自动增量 更改缓冲 数据仓库 DML InnoDB 插入缓冲区 OLTP SQL

插入缓冲区

更改缓冲区 的前一个名称 在MySQL 5.5中,添加了对缓冲二级索引页面 DELETE UPDATE 操作的 更改的支持 以前,只会 INSERT 缓冲操作 产生的更改 首选术语现在是 更改缓冲区

另请参阅 更改缓冲区 更改缓冲

插入缓冲

INSERT 操作 产生的二级索引页 更改存储 更改缓冲区中 而不是立即写入更改的技术,以便可以执行物理写入以最小化随机I / O. 它是 变更缓冲 的类型之一 ; 其他是 删除缓冲 清除缓冲

如果辅助索引是 唯一的 则不使用插入缓冲 ,因为在写入新条目之前无法验证新值的唯一性。 其他类型的更改缓冲适用于唯一索引。

另请参阅 更改缓冲区 更改缓冲 删除缓冲 插入缓冲区 清除缓冲 唯一索引

插入意图锁

一种 间隙锁定 ,由 INSERT 行插入前 操作 设置 这种类型的 表示插入的意图,即插入相同索引间隙的多个事务如果不插入间隙内的相同位置则不需要等待彼此。 有关更多信息,请参见 第15.7.1节“InnoDB锁定”

另请参阅 间隙锁定 锁定 下一键锁定

一个 mysqld 守护程序,管理一个 数据目录, 表示一个或多个 带有一组 表的 数据库 在开发,测试和一些 复制 方案中,在同一 服务器 计算机 上具有多个实例 是常见的 ,每个 实例 管理其自己的数据目录并监听其自己的端口或套接字。 如果一个实例运行 磁盘绑定 工作负载,则服务器可能仍有额外的CPU和内存容量来运行其他实例。

另请参见 数据目录 数据库 磁盘绑定 mysqld 复制 服务器

仪器仪表

在源代码级别进行修改以收集用于调整和调试的性能数据。 在MySQL中,使用 INFORMATION_SCHEMA PERFORMANCE_SCHEMA 数据库 通过SQL接口公开由检测收集的 数据。

另请参见 INFORMATION_SCHEMA 性能架构

意图独家锁

意图锁

意图锁定

一种 适用于表 ,用于指示 事务 要在表中的行上获取 的锁类型 不同的事务可以在同一个表上获取不同类型的意图锁,但是获取表上的 意图独占 (IX)锁 的第一个事务会 阻止其他事务获取表上的任何S或X锁。 相反,第一个获得 意图的 交易是 共享的 (IS)锁定表阻止其他事务获取表上的任何X锁。 两阶段进程允许按顺序解析锁定请求,而不会阻塞锁定和兼容的相应操作。 有关此锁定机制的更多信息,请参见 第15.7.1节“InnoDB锁定”

另请参阅 锁定 锁定模式 锁定 事务

意图共享锁

意图锁

内在临时表

一个优化的内部 InnoDB 由所使用的临时表 优化

另请参见 优化程序

倒指数

为文档检索系统优化的数据结构,用于实现 InnoDB 全文搜索 InnoDB FULLTEXT索引 ,作为一个反向索引来实现,记录每个字的位置的文档中,而不是一个表行的位置。 单个列值(存储为文本字符串的文档)由反向索引中的许多条目表示。

另请参见 全文搜索 FULLTEXT索引 ilist

IOPS

每秒I / O操作的 缩写 繁忙系统的常用度量,尤其是 OLTP 应用程序。 如果此值接近存储设备可以处理的最大值,则应用程序可能会 受磁盘限制 ,从而限制了 可伸缩性

另请参见 磁盘绑定 OLTP 可伸缩性

隔离级别

数据库处理的基础之一。 隔离是 I 的首字母缩写 ACID ; 隔离级别是在多个 事务 进行更改并同时执行查询 时,对结果的性能和可靠性,一致性和可重现性进行微调的设置

从最高的一致性和保护到最小,InnoDB支持的隔离级别是: SERIALIZABLE REPEATABLE READ READ COMMITTED READ UNCOMMITTED

对于 InnoDB 表,许多用户可以保留 所有操作 的默认隔离级别( REPEATABLE READ )。 专家用户可以选择 READ COMMITTED 级别,因为它们通过 OLTP 处理 推动可伸缩性的界限 ,或者在数据仓库操作期间,其中轻微的不一致性不会影响大量数据的聚合结果。 边缘上的级别( SERIALIZABLE READ UNCOMMITTED )将处理行为改变到很少使用它们的程度。

另请参阅 ACID OLTP READ COMMITTED READ UNCOMMITTED REPEATABLE READ SERIALIZABLE transaction

Ĵ

加入

通过引用包含相同值的表中的列来从多个表检索数据 查询 理想情况下,这些列是 InnoDB 外键 关系的一部分,可确保 参照完整性 并对连接列建立 索引 通常用于在 规范化 数据设计中 通过用数字ID替换重复的字符串来节省空间并提高查询性能

另请参阅 外键 索引 规范化 查询 参照完整性

ķ

KEY_BLOCK_SIZE

用于指定 InnoDB 使用 压缩行格式 中数据页大小的选项 默认值为8千字节。 较低的值可能会达到内部限制,这取决于行大小和压缩百分比的组合。

对于 MyISAM 表, KEY_BLOCK_SIZE 可以选择指定用于索引键块的大小(以字节为单位)。 该值被视为提示; 如有必要,可以使用不同的尺寸。 KEY_BLOCK_SIZE 为单个索引定义指定 值将覆盖表级 KEY_BLOCK_SIZE 值。

另请参见 压缩行格式

大号

一种轻量级结构,用于 为其自身的内部存储器结构 InnoDB 实现 锁定 ,通常保持一段时间,以毫秒或微秒为单位。 一般术语,包括 互斥锁 (用于独占访问)和 rw锁 (用于共享访问)。 某些锁存器是 InnoDB 性能调整 的重点 有关锁存器使用和争用的统计信息可通过 Performance Schema 界面获得。

另请参阅 lock locking mutex Performance Schema rw-lock

名单

InnoDB 缓冲池 被表示为内存列表 当访问新页面并进入缓冲池时,该列表被重新排序,因为缓冲池中的页面被再次访问并被认为是更新的,并且因为长时间未访问的页面 从缓冲池中 逐出 缓冲池分为 子列表 ,替换策略是熟悉的 LRU 技术 的变体

另请参见 缓冲池 逐出 LRU 页面 子列表

控制对资源(例如表,行或内部数据结构)的访问的对象的高级概念,作为 锁定 策略的 一部分 对于密集的性能调优,您可能会深入研究实现锁的实际结构,例如 互斥锁 锁存器

另请参见 latch lock mode locking mutex

锁定升级

在某些数据库系统中使用的操作,它将许多 行锁 转换为单个 表锁 ,从而节省了内存空间,但减少了对表的并发访问。 InnoDB 对行锁使用节省空间的表示,因此 不需要 升级。

另请参见 锁定 行锁定 表锁定

锁定模式

共享(S) 允许 事务 读取行。 多个事务可以同时在同一行上获取S锁。

独占(X)锁允许事务更新或删除行。 没有其他事务可以同时在同一行上获取任何类型的锁。

意图锁定 适用于表,用于指示事务要在表中的行上获取哪种锁定。 不同的事务可以在同一个表上获取不同类型的意图锁,但是获取表上的意图独占(IX)锁的第一个事务会阻止其他事务获取表上的任何S或X锁。 相反,在表上获取意图共享(IS)锁的第一个事务会阻止其他事务获取表上的任何X锁。 两阶段进程允许按顺序解析锁定请求,而不会阻塞锁定和兼容的相应操作。

另请参见 意图锁定 锁定 锁定 事务

锁定

保护 事务 不被查看或更改其他事务正在查询或更改的数据 的系统 锁定 策略必须兼顾可靠性和(的原则数据库操作的一致性, ACID 对需要良好的性能哲学) 并发 微调锁定策略通常涉及选择 隔离级别 并确保所有数据库操作对于该隔离级别是安全可靠的。

另请参见 ACID 并发 隔离级别 锁定 事务

锁定读取

一个 SELECT 执行 锁定 操作的 语句 InnoDB 无论是 SELECT ... FOR UPDATE SELECT ... LOCK IN SHARE MODE 它有可能产生 死锁 ,具体取决于 事务 隔离级别 非锁定读取 相反 只读事务中的 全局表不允许

SELECT ... FOR SHARE SELECT ... LOCK IN SHARE MODE 在MySQL 8.0.1中 替换 ,但 LOCK IN SHARE MODE 仍可用于向后兼容。

请参见 第15.7.2.4节“锁定读取”

另请参见 死锁 隔离级别 锁定 非锁定读取 只读事务

日志

InnoDB 上下文中, 日志 日志文件 通常是指 ib_logfile 文件 表示 重做日志 另一种类型的 日志是 撤销日志 ,它是一个存储区域,用于保存由活动事务修改的数据副本。 N InnoDB

在MySQL中重要的其他类型的日志是 错误日志 (用于诊断启动和运行时问题), 二进制日志 (用于复制和执行时间点恢复), 一般查询日志 (用于诊断应用程序问题),和 慢查询日志 (用于诊断性能问题)。

另请参见 二进制日志 错误日志 常规查询日志 ib_logfile 重做日志 慢查询日志 撤消日志

日志缓冲区

保存要写入 构成 重做日志 日志文件的 数据的内存区域 它由 配置选项 控制 innodb_log_buffer_size

另请参阅 日志文件 重做日志

日志文件

构成 重做日志 ib_logfile N 文件之一 数据从 日志缓冲区 存储区 写入这些文件

另请参阅 ib_logfile 日志缓冲区 重做日志

日志组

组成 重做日志 的文件集 ,通常命名为 ib_logfile0 ib_logfile1 (因此,有时统称为 ib_logfile 。)

另请参阅 ib_logfile 重做日志

合乎逻辑

一种涉及高级抽象方面的操作,例如表,查询,索引和其他SQL概念。 通常,逻辑方面对于使数据库管理和应用程序开发方便和可用非常重要。 身体 对比

另请参见 逻辑备份 物理

逻辑备份

一种 备份 ,可以重现表结构和数据,而无需复制实际的数据文件。 例如,该 mysqldump 命令产生一个逻辑备份,因为它的输出中包含语句,例如 CREATE TABLE INSERT 可重新创建的数据。 物理备份形成 对比 逻辑备份提供了灵活性(例如,您可以在还原之前编辑表定义或插入语句),但 恢复时间 比物理备份 要长得 多。

另请参阅 backup mysqldump 物理备份 还原

疏松_

InnoDB 服务器 启动 添加到 配置选项的 前缀 ,因此当前MySQL级别无法识别的任何新配置选项都不会导致启动失败。 MySQL处理以此前缀开头的配置选项,但如果前缀后面的部分不是可识别的选项,则会发出警告而不是失败。

另见 启动

低水位

表示下限的值,通常是某些纠正措施开始或变得更具侵略性的阈值。 高水位 对比

另见 高水位线

LRU

最近最少使用 的首字母缩写 ,是管理存储区域的常用方法。 当需要空间来缓存较新的项目时, 最近未使用的项目将被 逐出 InnoDB 采用LRU机制默认管理 页面 的内部 缓冲池 ,但使得情况例外,其中一个页面可能只读单一的时间,如在 全表扫描 LRU算法的这种变化称为 中点插入策略 有关更多信息,请参见 第15.5.1节“缓冲池”

另请参见 缓冲池 逐出 全表扫描 中点插入策略 页面

LSN

日志序列号 ”的 缩写 这个任意的,不断增加的值表示与 重做日志中 记录的操作相对应的时间点 (此时间点与 事务 边界 无关 ;它可以位于一个或多个事务的中间。)它 InnoDB 崩溃恢复 期间 内部使用 ,用于管理 缓冲池

在MySQL 5.6.3之前,LSN是一个4字节的无符号整数。 当重做日志文件大小限制从4GB增加到512GB时,LSN成为MySQL 5.6.3中的8字节无符号整数,因为需要额外的字节来存储额外的大小信息。 在MySQL 5.6.3或更高版本上构建的使用LSN值的应用程序应使用64位而不是32位变量来存储和比较LSN值。

MySQL Enterprise Backup 产品中,您可以指定LSN来表示进行 增量备份的 时间点 相关的LSN由 mysqlbackup 命令 的输出显示 一旦您具有与完全备份时间相对应的LSN,您就可以指定该值以进行后续增量备份,其输出包含用于下一次增量备份的另一个LSN。

另请参阅 缓冲池 崩溃恢复 增量备份 MySQL Enterprise Backup 重做日志 事务

中号

.MRG文件

包含对 MERGE 存储引擎 使用的其他表的引用的文件 具有此扩展名的文件始终包含在由 MySQL Enterprise Backup 产品 mysqlbackup 命令生成的 备份中

另请参见 MySQL Enterprise Backup mysqlbackup命令

.MYD文件

MySQL用于存储 MyISAM 数据的文件

另请参见 .MYI文件 MySQL Enterprise Backup mysqlbackup命令

.MYI文件

MySQL用于存储 MyISAM 索引的文件

另请参见 .MYD文件 MySQL Enterprise Backup mysqlbackup命令

主服务器

经常缩短为 主人 复制 方案中的 数据库服务器计算机, 用于处理数据的初始插入,更新和删除请求。 这些更改将传播到其他服务器(称为 从属服务器) 并在其上重复执行

另请参见 复制 从属服务器

主线程

在后台执行各种任务 InnoDB 线程 这些任务中的大多数都与I / O相关,例如将更改从 更改缓冲区 写入 相应的二级索引。

为了提高 并发性 ,有时将操作从主线程移动到单独的后台线程。 例如,在MySQL 5.6和更高版本, 脏页 刷新 缓冲池 页清除 线程而非主线程。

请参阅 缓冲池 更改缓冲区 并发 脏页 刷新 页面清理 线程

MDL

元数据锁定 ”的 缩写

另请参见 元数据锁定

memcached的

许多MySQL和 NoSQL 软件堆栈 的流行组件 ,允许对单个值进行快速读取和写入,并将结果完全缓存在内存中。 传统上,应用程序需要额外的逻辑来将相同的数据写入MySQL数据库以进行永久存储,或者在MySQL数据库尚未缓存在内存中时从MySQL数据库中读取数据。 现在,应用程序可以使用简单的 memcached 协议,由许多语言的客户端库支持,使用 InnoDB 直接与MySQL服务器通信 NDB 表。 这些与MySQL表的NoSQL接口允许应用程序实现比直接发出SQL语句更高的读写性能,并且可以简化已经包含 用于内存缓存的 memcached的 系统的应用程序逻辑和部署配置

MySQL 5.6及更高版本提供了表 memcached 接口 InnoDB ; 有关详细信息 请参见 第15.19节“InnoDB memcached插件” memcached 接口 NDB 在NDB Cluster 7.2及更高版本中可用; 有关详细信息, 请参阅 http://dev.mysql.com/doc/ndbapi/en/ndbmemcache.html

另见 InnoDB NoSQL

合并

将更改应用于内存中缓存的数据,例如将页面放入 缓冲池时 更改缓冲区 记录的任何适用更改 都将合并到缓冲池中的页面中。 更新的数据最终 刷新 机制 写入 表空间

另请参见 缓冲池 更改缓冲区 刷新 表空间

元数据锁

一种 ,用于防止 对另一个 事务 同时使用的表执行 DDL 操作 有关详细信息,请参见 第8.11.4节“元数据锁定”

在线 操作的 增强功能 ,特别是在MySQL 5.6及更高版本中,专注于减少元数据锁定的数量。 我们的目标是为DDL操作不更改表结构(如 CREATE INDEX DROP INDEX InnoDB 表)来进行,同时对表进行查询,更新,等其他交易。

另请参见 DDL 锁定 在线 事务

指标计数器

在MySQL 5.6及更高版本 INNODB_METRICS INFORMATION_SCEMA中 实现的功能 您可以查询 低级 操作的 计数 和总计 InnoDB ,并将结果与 性能模式中的 数据结合使用进行性能调整

另请参见 counter INFORMATION_SCHEMA Performance Schema

中点插入策略

最初将 页面 放入 InnoDB 缓冲池的技术 不是在 列表 最新 端,而是在中间的某个位置。 根据 innodb_old_blocks_pct 选项 的设置,此点的确切位置可能会有所不同 目的是只读取一次的页面,例如在 全表扫描 期间 ,可以比使用严格的 LRU 算法 更早地从缓冲池中老化 有关更多信息,请参见 第15.5.1节“缓冲池”

另请参见 缓冲池 全表扫描 LRU 页面

微型交易

DML 操作 期间 InnoDB 物理 级别对内部数据结构 进行更改时 的内部 处理 阶段 迷你交易(mtr)没有 回滚的 概念 ; 在单个 事务中 可以发生多个小 事务 小型事务将信息写入 崩溃恢复 期间使用 重做日志 小事务也可以在常规事务的上下文之外发生,例如在 后台线程的 清除 处理 期间

另请参阅 提交 崩溃恢复 DML 物理 清除 重做日志 回滚 事务

混合模式插入

一个 INSERT 语句,其中 为某些但不是所有新行指定了 自动增量 值。 例如, INSERT 在某些情况下和 NULL 其他情况下 ,多值 可以指定自动增量列的值 InnoDB 为列值指定为的行生成自动增量值 NULL 另一个示例是一个 INSERT ... ON DUPLICATE KEY UPDATE 语句,其中可以生成但不使用自动增量值,用于处理为 语句 UPDATE 而不是 INSERT 语句的 任何重复行

可能导致 复制 配置中 服务器 从属 服务器 之间的一致性问题 可能需要调整 innodb_autoinc_lock_mode 配置选项 的值

另请参见 自动增量 innodb_autoinc_lock_mode 主服务器 复制 从属服务器

地铁

迷你交易

多核心

一种可以利用多线程程序的处理器,例如MySQL服务器。

多版本并发控制

MVCC

互斥

互斥变量 ”的 非正式缩写 (Mutex本身是 互斥 ”的 缩写 。) InnoDB 用于表示和强制执行 内部内存数据结构的 独占访问 锁定 的低级对象 获取锁定后,将阻止任何其他进程,线程等获取相同的锁定。 rw-locks 对比 ,后者 InnoDB 用于表示和强制执行 内部内存数据结构的 共享访问 互斥锁和rw锁被统称为 锁存器

另请参见 latch lock Performance Schema Pthreads rw-lock

MVCC

multiversion并发控制 ”的 缩写 此技术允许 具有特定 隔离级别的 InnoDB 事务 执行 一致的读取 操作; 也就是说,查询其他事务正在更新的行,并查看这些更新发生之前的值。 这是一种增强 并发性 的强大技术 ,允许查询在没有等待的情况下继续进行,因为 其他事务持有了

这种技术在数据库世界中并不普遍。 其他一些数据库产品和一些其他MySQL存储引擎不支持它。

另请参见 ACID 并发 一致性读取 隔离级别 锁定 事务

my.cnf中

在Unix或Linux系统上,MySQL 选项文件的名称

另请参见 my.ini 选项文件

的my.ini

Windows系统上MySQL 选项文件的名称

另见 my.cnf 选项文件

MySQL的

MySQL的 计划是MySQL数据库的命令行解释。 通过将请求传递给 mysqld 守护程序 处理 SQL 语句以及特定于MySQL的命令 SHOW TABLES

另请参见 mysqld SQL

MySQL企业备份

一种执行 MySQL数据库 热备份 许可产品 它在备份 InnoDB 时提供最高效率和灵活性 ,但也可以备份 MyISAM 和其他类型的表。

另请参阅 热备份 InnoDB

mysqlbackup命令

MySQL Enterprise Backup 产品的 命令行工具 它执行一个 热备份 操作 InnoDB 的表,和一个 热备份 MyISAM 等各种表。 有关此命令的更多信息 请参见 第30.2节“MySQL Enterprise备份概述”

另请参阅 热备份 MySQL Enterprise Backup 热备份

mysqld的

mysqld的 程序是MySQL数据库的数据库引擎。 它作为Unix守护程序或Windows服务运行,不断等待请求并在后台执行维护工作。

另见 mysql

mysqldump的

一种命令,用于 对数据库,表和表数据的某些组合 执行 逻辑备份 结果是重现原始模式对象,数据或两者的SQL语句。 对于大量数据, 诸如 MySQL Enterprise Backup之 物理备份 解决方案 更快,特别是对于 还原 操作。

另请参阅 逻辑备份 MySQL Enterprise Backup 物理备份 还原

ñ

自然的关键

索引列,通常是 主键 ,其中值具有一些真实世界的重要性。 通常建议不要因为:

  • 如果值应该更改,则可能需要大量索引维护来重新排序 聚簇索引 并更新在每个 辅助索引 中重复的主键值的副本

  • 即使看似稳定的值也会以不可预测的方式改变,这些方式难以在数据库中正确表示。 例如,一个国家/地区可以更改为两个或几个,使原始国家/地区代码过时。 或者,有关唯一值的规则可能有例外。 例如,即使纳税人ID对于单个人来说是唯一的,数据库也可能必须处理违反该规则的记录,例如在身份被盗的情况下。 纳税人ID和其他敏感ID号码也会导致主要密钥较差,因为它们可能需要加密,加密,并以其他方式与其他列进行不同的处理。

因此,通常最好使用任意数值来形成 合成键 ,例如使用 自动增量 列。

另请参见 自动增量 聚簇索引 主键 二级索引 合成键

邻居页面

任何 页面 在同一 程度 作为特定页面。 当选择要 刷新 页面时, 通常也刷新 任何 页面 ,作为传统硬盘的I / O优化。 在MySQL 5.6及更高版本中,此行为可由配置变量控制 innodb_flush_neighbors ; 您可能会为SSD驱动器关闭该设置,因为SSD驱动器在随机位置编写较小批量数据的开销不同。

另请参见 脏页 范围 刷新 页面

下一把锁

一个的组合 记录锁定 在索引记录和一个 间隙锁定 在索引记录之前的间隙。

另请参见 间隙锁定 锁定 记录锁定

非锁定读取

一个 查询 不使用 SELECT ... FOR UPDATE SELECT ... LOCK IN SHARE MODE 条款。 唯一类型的查询允许在 只读事务 中使用全局表 锁定读取 相反 请参见 第15.7.2.3节“一致的非锁定读取”

SELECT ... FOR SHARE SELECT ... LOCK IN SHARE MODE 在MySQL 8.0.1中 替换 ,但 LOCK IN SHARE MODE 仍可用于向后兼容。

另请参见 锁定读取 查询 只读事务

不可重复的阅读

查询检索数据的情况,以及同一 事务中 的后续查询 检索应该是相同数据的内容,但查询返回不同的结果(由此同时提交的另一个事务更改)。

这种操作违背了 ACID 数据库设计原则。 在事务中,数据应该是一致的,具有可预测和稳定的关系。

间不同的 隔离级别 ,非可重复读取由防止 串行化读取 重复读取 的水平,并且通过允许 一致读取 ,并 读未提交的 水平。

另请参见 ACID 一致读取 隔离级别 READ UNCOMMITTED REPEATABLE READ SERIALIZABLE transaction

非阻塞I / O.

行业术语,与 异步I / O 相同

另请参见 异步I / O

标准化

数据库设计策略,将数据拆分为多个表,并将重复值压缩为由ID表示的单个行,以避免存储,查询和更新冗余或冗长的值。 它通常用于 OLTP 应用程序。

例如,地址可能被赋予唯一ID,因此人口普查数据库可以 通过将该ID与一个系列的每个成员相关联 来表示 该地址处 的关系 ,而不是存储复杂值的多个副本,例如 123 Main Street ,Anytown,美国

再例如,虽然简单的地址簿应用程序可能将每个电话号码存储在与人名和地址相同的表中,但电话公司数据库可能会为每个电话号码分配一个特殊ID,并将号码和ID存储在单独的表中。 当区域代码分开时,这种标准化表示可以简化大规模更新。

并不总是建议进行标准化。 主要查询并且仅通过完全删除和重新加载来更新的数据通常保存在具有重复值的冗余副本的更少,更大的表中。 此数据表示称为 非规范化 ,并且经常在数据仓库应用程序中找到。

另请参见 非规范化 外键 OLTP 关系

NoSQL的

一组数据访问技术的广义术语,它不使用 SQL 语言作为读取和写入数据的主要机制。 一些NoSQL技术充当键值存储,只接受单值读写; 一些人放松了 ACID 方法 的限制 ; 还有一些人不需要预先计划好的 架构 通过使用 memcached API直接访问某些类型的MySQL表, MySQL用户可以将NoSQL风格的处理速度和简单性与SQL操作相结合,以实现灵活性和便利性 memcached的 接口 InnoDB 表格在MySQL 5.6及更高版本中可用; 有关详细信息 请参见 第15.19节“InnoDB memcached插件” memcached 接口 NDB 在NDB Cluster 7.2及更高版本中可用; 请参阅 NDB群集的ndbmemcache-Memcache API

另请参见 ACID InnoDB memcached schema SQL

NOT NULL约束

一种 约束 ,指定 不能包含任何 NULL 值。 它有助于保持 参照完整性 ,因为数据库服务器可以识别具有错误缺失值的数据。 它还有助于查询优化中涉及的算法,允许优化器预测该列上索引中的条目数。

另请参见 column constraint NULL primary key referential integrity

空值

SQL中 的特殊值 ,表示缺少数据。 任何涉及 NULL 值的 算术运算或相等测试 反过来都会产生 NULL 结果。 (因此它类似于NaN的IEEE浮点概念, 不是数字 。) 在确定要划分的行数时, 任何聚合计算(例如 AVG() 忽略带有 NULL 值的行)。 唯一适用于 NULL 值的 测试 使用SQL惯用语 IS NULL IS NOT NULL

NULL 值在 索引 操作中 起作用 ,因为对于性能,数据库必须最小化跟踪丢失数据值的开销。 通常, NULL 值不存储在索引中,因为使用标准比较运算符测试索引列的查询永远不会将行与 NULL 该列 匹配 出于同样的原因,唯一索引不会阻止 NULL 值; 这些值根本没有在索引中表示。 NOT NULL 在列上 声明 约束可以确保索引中没有任何行,从而可以更好地进行查询优化(准确计算行数并估计是否使用索引)。

由于 主键 必须能够唯一标识表中的每一行,因此单列主键不能包含任何 NULL 值,并且多列主键不能包含所有列中包含 NULL 值的 任何行

虽然Oracle数据库允许将 NULL 值与字符串连接,但 InnoDB 请将此类操作的结果视为 NULL

另请参见 索引 主键 SQL

Ø

.OPT文件

包含数据库配置信息的文件。 具有此扩展名的文件包含在由 MySQL Enterprise Backup 产品 mysqlbackup 命令生成的 备份中

另请参见 MySQL Enterprise Backup mysqlbackup命令

页外专栏

包含可变长度数据(例如 BLOB VARCHAR )的列太长而无法放在 B树 页面上。 数据存储在 溢出页面中 动态 记录格式是这样的存储比旧的更高效的 紧凑 行格式。

另请参见 B树 紧凑行格式 动态行格式 溢出页面

OLTP

在线交易处理 ”的 缩写 数据库系统或数据库应用程序,它运行具有许多 事务 的工作负载 ,频繁写入和读取,通常一次影响少量数据。 例如,航空公司预订系统或处理银行存款的应用程序。 数据可以以 标准化 形式 组织, 以实现 DML (插入/更新/删除)效率和 查询 效率 之间的平衡 数据仓库 对比

凭借其 行级锁定 事务 功能, InnoDB 是OLTP应用程序中使用的MySQL表的理想存储引擎。

另请参见 数据仓库 DML InnoDB 查询 行锁 事务

线上

一种不涉及数据库停机,阻塞或受限操作的操作。 通常应用于 DDL 缩短受限操作周期的操作(例如 快速索引创建 )已经演变为 MySQL 5.6中 更广泛的 在线DDL 操作。

在备份环境中, 热备份 是在线操作, 热备份 部分是在线操作。

另请参阅 DDL 快速索引创建 热备份 联机DDL 热备份

在线DDL

一种 InnoDB DDL (主要 ALTER TABLE )操作 期间 提高表的性能,并发性和可用性的功能 有关 详细信息 请参见 第15.12节“InnoDB和在线DDL”

细节因操作类型而异。 在某些情况下,可以在进行中同时修改表 ALTER TABLE 可以在没有表副本或使用特殊优化类型的表副本的情况下执行该操作。 就地操作的DML日志空间使用由 innodb_online_alter_log_max_size 配置选项 控制

此功能是对 MySQL 5.5中 快速索引创建 功能 的增强

另请参见 DDL 快速索引创建 在线

乐观

一种指导关系数据库系统的低级实现决策的方法。 关系数据库中 的性能和 并发性 要求 意味着必须快速启动或分派操作。 一致性和 参照完整性 的要求 意味着任何操作都可能失败:事务可能会被回滚,即 DML 操作可能违反约束,锁定请求可能导致死锁,网络错误可能导致超时。 乐观策略是假设大多数请求或尝试都会成功的策略,因此为失败案例做准备的工作相对较少。 当这个假设成立时,数据库几乎不做不必要的工作; 当请求失败时,必须进行额外的工作来清理和撤消更改。

InnoDB 使用乐观策略进行 锁定 提交 等操作 例如,事务更改的数据可以在提交发生之前写入数据文件,从而使提交本身非常快,但如果事务回滚则需要更多工作来撤消更改。

乐观的策略相反的是一个 悲观的 一个,其中一个系统进行了优化处理是不可靠的,经常不成功的操作。 这种方法在数据库系统中很少见,因为在选择可靠的硬件,网络和算法时要特别小心。

另请参见 提交 并发 DML 锁定 悲观 参照完整性

优化

MySQL组件,根据 相关 表的 特征和数据分布 ,确定 用于 查询 的最佳 索引 连接 顺序

另请参见 index join query table

选项

MySQL的配置参数,可以存储在 选项文件中 ,也可以在 命令行中传递。

对于 选项 适用于 InnoDB的 表,每个选项名称开头的前缀 innodb_

另请参见 InnoDB 选项 选项文件

选项文件

包含 MySQL实例 的配置 选项 的文件 传统上,在Linux和Unix上,这个文件被命名 my.cnf ,在Windows上它被命名 my.ini

另请参见 配置文件 my.cnf中 my.ini文件 选项

溢出页面

单独分配的磁盘 页面 包含可变长度的列(例如 BLOB VARCHAR ),这些列太长而无法放在 B树 页面上。 关联列称为 页外列

另请参见 B-tree 页外列 页面

P

.par文件

包含分区定义的文件。 具有此扩展名的文件包含在由 MySQL Enterprise Backup 产品 mysqlbackup 命令生成的 备份中

通过 InnoDB 在MySQL 5.7.6中 引入对 的本机分区支持, .par 不再为分区 InnoDB 创建文件 分区 MyISAM 表继续使用 .par MySQL 5.7中的文件。 在MySQL 8.0中,分区支持仅由 InnoDB 存储引擎提供。 因此, .par 从MySQL 8.0开始不再使用文件。

另请参见 MySQL Enterprise Backup mysqlbackup命令

一个单位,表示 InnoDB 在磁盘( 数据文件 )和内存( 缓冲池 之间的任何时间传输 多少数据 页面可以包含一行或多 ,具体取决于每行中的数据量。 如果行不完全适合单个页面,则 InnoDB 设置其他指针样式的数据结构,以便有关该行的信息可以存储在一个页面中。

在每个页面中放入更多数据的一种方法是使用 压缩行格式 对于使用BLOB或大文本字段的表, 紧凑行格式 允许将这些大列与行的其余部分分开存储,从而减少不引用这些列的查询的I / O开销和内存使用量。

InnoDB 批量读取或写入页面集以增加I / O吞吐量时,它一次读取或写入一个 范围

InnoDB MySQL实例中的 所有 磁盘数据结构共享相同的 页面大小

另请参见 缓冲池 紧凑行格式 压缩行格式 数据文件 范围 页面大小

页面清洁

一个 InnoDB 后台 线程 刷新 脏页 缓冲池 在MySQL 5.6之前,此活动由 主线程 执行 页面清除程序线程的数量由 innodb_page_cleaners MySQL 5.7.4中引入 配置选项 控制

另请参见 缓冲池 脏页 刷新 主线程 线程

页面大小

对于MySQL 5.5以及包括MySQL 5.5的版本, InnoDB 每页 的大小 固定为16千字节。 此值表示余额:大到足以容纳大多数行的数据,但又小到足以最小化将不需要的数据传输到内存的性能开销。 未测试或支持其他值。

从MySQL 5.6开始, InnoDB 实例 的页面大小 可以是4KB,8KB或16KB,由 innodb_page_size 配置选项 控制 从MySQL 5.7.6开始, InnoDB 还支持32KB和64KB的页面大小。 对于32KB和64KB页面大小, ROW_FORMAT=COMPRESSED 不受支持,最大记录大小为16KB。

在创建MySQL实例时设置页面大小,之后它保持不变。 相同的页面大小适用于所有 InnoDB 表空间 ,包括 系统表空间 每表文件表 空间和 一般表空间

较小的页面大小可以帮助使用小块大小的存储设备的性能,特别是对于 磁盘绑定 工作负载中的 SSD 设备 ,例如 OLTP 应用程序。 更新单个行时,将更少的数据复制到内存中,写入磁盘,重新组织,锁定等等。

另请参见 磁盘绑定 每表文件 常规表空间 实例 OLTP 页面 SSD 系统表空间 表空间

父表

外键 关系中 的表, 其中包含从 子表 指向的初始列值 删除或更新父表中的行的后果取决于 外键定义中 ON UPDATE ON DELETE 子句。 可以依次自动删除或更新子表中具有相应值的行,或者可以设置这些列 NULL ,或者可以防止操作。

另请参见 子表 外键

部分备份

包含 MySQL数据库 中的某些 或MySQL实例中的某些数据库 备份 完整备份 对比

另请参阅 备份 完整备份

部分指数

仅表示列值的一部分 索引 ,通常 是长 的前N个字符( 前缀 VARCHAR

另请参见 索引 索引前缀

性能架构

performance_schema MySQL 5.5及更高版本中 模式提供了一组表,您可以查询这些表以获取有关MySQL服务器许多内部部分的性能特征的详细信息。 请参见 第26章, MySQL性能架构

另请参见 INFORMATION_SCHEMA latch mutex rw-lock

悲观

一种牺牲性能或并发性以支持安全性的方法。 如果大部分请求或尝试可能失败,或者请求失败的后果严重,则是适当的。 InnoDB 使用所谓的悲观 锁定 策略,以最大限度地减少 死锁 的可能性 在应用程序级别,您可以通过使用一开始就获取事务所需的所有锁的悲观策略来避免死锁。

许多内置数据库机制使用相反的 乐观 方法。

另请参见 死锁 锁定 乐观

幻影

显示在查询结果集中但不在先前查询的结果集中的行。 例如,如果查询在 事务中 运行两次 ,并且同时另一个事务在插入新行或更新行后提交,以使其与 WHERE 查询 子句 匹配

这种情况称为幻像读取。 防止比 不可重复读取 更难 ,因为锁定第一个查询结果集中的所有行不会阻止导致幻像出现的更改。

在不同的 隔离级别中 ,可 序列化读取 级别 阻止了幻像读取 ,并且 可重复读取 一致读取 读取未提交 级别 允许

另请参见 一致读取 隔离级别 不可重复读取 READ UNCOMMITTED REPEATABLE READ SERIALIZABLE transaction

物理

一种涉及硬件相关方面的操作,例如磁盘块,内存页,文件,位,磁盘读取等。 通常,在专家级性能调整和问题诊断期间,物理方面很重要。 逻辑 对比

另请参见 逻辑 物理备份

物理备份

一个 备份 那份实际数据文件。 例如, MySQL Enterprise Backup 产品 mysqlbackup 命令 会生成物理备份,因为其输出包含可由 服务器 直接使用的数据文件 ,从而实现更快的 还原 操作。 逻辑备份 对比 mysqld

另请参阅 备份 逻辑备份 MySQL Enterprise Backup 还原

PITR

时间点恢复的 缩写

另请参见 时间点恢复

计划稳定

查询执行计划的 一个属性, 优化程序每次为给定 查询 做出相同的选择 ,以便性能一致且可预测。

另请参阅 查询 查询执行计划

时间点恢复

还原 备份 以在特定日期和时间重新创建数据库状态 的过程 通常缩写为 PITR 由于指定时间不太可能与备份时间完全对应,因此该技术通常需要 物理备份 逻辑备份的组合 例如,使用 MySQL Enterprise Backup 产品,您可以还原在指定时间点之前执行的上一次备份,然后 在备份时间和PITR时间之间 重放 二进制日志中的 更改

另请参阅 备份 二进制日志 逻辑备份 MySQL Enterprise Backup 物理备份

字首

请参阅 索引前缀

准备备份

在完成 应用 二进制日志 增量备份的 所有阶段之后 ,由 MySQL Enterprise Backup 产品 生成的一组备份文件 生成的文件已准备好进行 恢复 在应用步骤之前,这些文件称为 原始备份

另请参阅 二进制日志 热备份 增量备份 MySQL Enterprise Backup 原始备份 还原

首要的关键

一组列 - 并且暗示,基于这组列的索引 - 可以唯一地标识表中的每一行。 因此,它必须是不包含任何 NULL 的唯一索引

InnoDB 要求每个表都有这样的索引(也称为 聚簇索引 集群索引 ),并根据主键的列值组织表存储。

选择主键值时,请考虑使用任意值( 合成键 ),而不是依赖于从某些其他源( 自然键 派生的值

另请参见 聚簇索引 索引 自然键 合成键

处理

执行程序的实例。 操作系统在多个正在运行的进程之间切换,允许一定程度的 并发 在大多数操作系统上,进程可以包含 共享资源的 多个 执行 线程 线程之间的上下文切换比进程之间的等效切换更快。

另请参见 并发 线程

伪记录

索引中的人工记录,用于 锁定 当前不存在的键值或范围。

另请参见 infimum record locking supremum record

并行线程

POSIX线程标准,它定义了用于Unix和Linux系统上的线程和锁定操作的API。 在Unix和Linux系统上, InnoDB 将此实现用于 互斥锁

另见 互斥

清除

由一个或多个单独的后台线程(由其控制 innodb_purge_threads 执行的一种垃圾收集 ,它按周期性计划运行。 清除 历史列表中 解析和处理 撤消日志 页面, 以便删除标记为删除的聚簇和二级索引记录(通过以前的 语句),并且不再需要 MVCC 回滚 清除后,清除会从历史列表中释放撤消日志页面。 DELETE

另请参见 历史列表 MVCC 回滚 撤消日志

清除缓冲

DELETE 操作 产生的二级索引页 更改存储 更改缓冲区中 而不是立即写入更改的技术,以便可以执行物理写入以最小化随机I / O. (因为删除操作是一个两步过程,所以此操作会缓冲通常清除先前标记为删除的索引记录的写入。)它是一种 更改缓冲 类型 ; 其他是 插入缓冲 删除缓冲

另请参阅 更改缓冲区 更改缓冲 删除缓冲 插入缓冲区 插入缓冲

清除滞后

InnoDB 历史列表的 另一个名称 innodb_max_purge_lag 配置选项相关。

另见 历史列表 清除

清除线程

螺纹 的内 InnoDB 过程,其专用于执行周期性 清洗 操作。 在MySQL 5.6及更高版本中, innodb_purge_threads 配置选项 启用了多个清除线程

另见 purge thread

Q

询问

SQL中 ,从一个或多个 中读取信息的操作 根据数据的组织和查询的参数,可以通过查询 索引 来优化查找 如果涉及多个表,则查询称为 连接

由于历史原因,有时对语句内部处理的讨论 在更广泛的意义上 使用 查询 ,包括其他类型的MySQL语句,如 DDL DML 语句。

另请参见 DDL DML 索引 连接 SQL

查询执行计划

优化程序关于如何 最有效 地执行 查询 的决策集 ,包括