这些术语通常用于有关 MySQL 数据库服务器的信息中。
A
- .ARM 文件
ARCHIVE
表的元数据。与 .ARZ 文件 相反。扩展名为 .ARM 的文件始终包含在 MySQL 企业版备份 产品中mysqlbackup
命令生成的备份中。另请参见 .ARZ 文件、MySQL 企业版备份、mysqlbackup 命令。
- .ARZ 文件
ARCHIVE 表的数据。与 .ARM 文件 相反。扩展名为 .ARZ 的文件始终包含在 MySQL 企业版备份 产品中
mysqlbackup
命令生成的备份中。另请参见 .ARM 文件、MySQL 企业版备份、mysqlbackup 命令。
- ACID
ACID 是原子性 (Atomicity)、一致性 (Consistency)、隔离性 (Isolation) 和持久性 (Durability) 的首字母缩略词。这些属性在数据库系统中都非常理想,并且都与 事务 的概念密切相关。
InnoDB
的事务功能符合 ACID 原则。事务是 原子 的工作单元,可以 提交 或 回滚。当事务对数据库进行多次更改时,要么在事务提交时所有更改都成功,要么在事务回滚时所有更改都被撤消。
数据库始终处于一致状态 — 在每次提交或回滚之后,以及在事务进行期间。如果相关数据在多个表中被更新,查询将看到所有旧值或所有新值,而不是旧值和新值的混合。
事务在进行期间相互保护(隔离);它们不能相互干扰或看到彼此未提交的数据。这种隔离是通过 锁定 机制实现的。有经验的用户可以调整 隔离级别,在牺牲较少保护的情况下提高性能和 并发性,只要他们可以确定事务确实不会相互干扰。
事务的结果是持久的:一旦提交操作成功,该事务所做的更改将不会受到电源故障、系统崩溃、竞争条件或其他许多非数据库应用程序易受攻击的潜在危险的影响。持久性通常涉及写入磁盘存储,并具有一定程度的冗余以防电源故障或写入操作期间的软件崩溃。(在
InnoDB
中,双写缓冲区 有助于持久性。)- 自适应刷新
InnoDB 表的算法,可消除 检查点 引入的 I/O 负担。MySQL 不会一次性将所有已修改的 页 从 缓冲池 刷新到 数据文件,而是定期刷新一小部分已修改的页。自适应刷新算法通过根据刷新速率和生成 重做 信息的速度来估计执行这些定期刷新的最佳速率,从而扩展了此过程。
- 自适应哈希索引
InnoDB
表的优化,可通过在内存中构建 哈希索引 来加速使用=
和IN
运算符的查找。MySQL 监控对InnoDB
表的索引搜索,如果查询可以从哈希索引中受益,它将自动为经常访问的索引 页 构建哈希索引。从某种意义上说,自适应哈希索引在运行时配置 MySQL 以利用充足的内存,更接近于内存数据库的架构。此功能由innodb_adaptive_hash_index
配置选项控制。由于此功能有利于某些工作负载而不利于其他工作负载,并且哈希索引使用的内存是在 缓冲池 中保留的,因此通常应在启用和禁用此功能的情况下进行基准测试。哈希索引始终基于表上现有的 B 树 索引构建。MySQL 可以根据对索引的搜索模式,在 B 树定义的键的任何长度的前缀上构建哈希索引。哈希索引可以是部分的;不需要将整个 B 树索引缓存在缓冲池中。
- ADO.NET
使用 .NET 技术(如 ASP.NET)构建的应用程序的对象关系映射 (ORM) 框架。此类应用程序可以通过 Connector/NET 组件与 MySQL 交互。
- AIO
异步 I/O 的缩写。您可能会在
InnoDB
消息或关键字中看到此缩写。另请参见 异步 I/O。
- ANSI
在 ODBC 中,支持字符集和其他国际化方面的另一种方法。与 Unicode 相反。 Connector/ODBC 3.51 是 ANSI 驱动程序,而 Connector/ODBC 5.1 是 Unicode 驱动程序。
另请参见 Connector/ODBC、ODBC、Unicode。
- API
API 提供对 客户端 程序的 MySQL 协议和 MySQL 资源的低级访问。与 连接器 提供的更高级别的访问相反。
另请参见 C API、客户端、连接器、原生 C API、Perl API、PHP API、Python API、Ruby API。
- 应用程序编程接口 (API)
- 应用
当 MySQL 企业版备份 产品生成的备份不包含备份进行期间发生的最新更改时,将备份文件更新以包含这些更改的过程称为 应用 步骤。它由
mysqlbackup
命令的apply-log
选项指定。在应用更改之前,我们将这些文件称为 原始备份。应用更改后,我们将这些文件称为 已准备备份。更改记录在 ibbackup_logfile 文件中;应用步骤完成后,此文件不再需要。
另请参见 热备份、ibbackup_logfile、MySQL 企业版备份、已准备备份、原始备份。
- AS
Kerberos 认证服务器。AS 也可以指认证服务器提供的认证服务。
另请参见 认证服务器。
- ASP.net
使用 .NET 技术和语言开发基于 Web 的应用程序的框架。此类应用程序可以通过 Connector/NET 组件与 MySQL 交互。
另一种使用 MySQL 编写服务器端网页的技术是 PHP。
另请参见 .NET、ADO.NET、Connector/NET、Mono、PHP、Visual Studio。
- 程序集
.NET 系统中编译代码的库,通过 Connector/NET 访问。存储在 GAC 中,以允许版本控制而不会出现命名冲突。
- 异步 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。- 原子
在 SQL 上下文中,事务 是工作单元,要么完全成功(当 提交 时),要么根本没有效果(当 回滚 时)。事务的不可分割(“原子”)属性是首字母缩写词 ACID 中的 “A”。
- 原子 DDL
原子 DDL 语句是将与 DDL 操作关联的 数据字典 更新、存储引擎 操作和 二进制日志 写入组合到单个原子事务中。该事务要么完全提交,要么回滚,即使服务器在操作过程中停止。原子 DDL 支持是在 MySQL 8.0 中添加的。有关更多信息,请参见 第 15.1.1 节,“原子数据定义语句支持”。
- 原子指令
- 认证服务器
在 Kerberos 中,提供获取票证授予票证 (TGT) 所需的初始票证的服务,该票证是获取票证授予服务器 (TGS) 上其他票证所必需的。认证服务器 (AS) 与 TGS 一起构成一个密钥分发中心 (KDC)。
- 自动递增
表列的属性(由
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
包括优化和innodb_autoinc_lock_mode
选项,因此您可以配置并优化自动递增值的预测序列与插入操作的最大 并发性 之间的平衡。另请参见 自动递增、并发、innodb_autoinc_lock_mode。
- 自动提交
一种设置,在每个 SQL 语句后执行 提交 操作。此模式不建议用于处理具有跨越多个语句的 事务 的
InnoDB
表。它可以帮助InnoDB
表上的 只读事务 的性能,因为它最大程度地减少了来自 锁定 和 撤销 数据生成的开销,尤其是在 MySQL 5.6.4 及更高版本中。它也适合处理MyISAM
表,其中事务不适用。- 可用性
应对和(如果需要)从主机上的故障中恢复的能力,包括 MySQL、操作系统或硬件故障以及可能导致停机的维护活动。通常与 可扩展性 结合在一起,作为大规模部署的关键方面。
另请参见 可扩展性。
B
- B 树
一种树形数据结构,在数据库索引中很受欢迎。该结构始终保持排序,从而能够快速查找精确匹配项(等于运算符)和范围(例如,大于、小于和
BETWEEN
运算符)。这种类型的索引可用于大多数存储引擎,例如InnoDB
和MyISAM
。因为 B 树节点可以有许多子节点,所以 B 树与二叉树不同,二叉树每个节点最多只有 2 个子节点。
与 哈希索引 相比,哈希索引仅在
MEMORY
存储引擎中可用。MEMORY
存储引擎也可以使用 B 树索引,如果您的一些查询使用范围运算符,则应为MEMORY
表选择 B 树索引。术语 B 树的使用是指索引设计的通用类别。MySQL 存储引擎使用的 B 树结构可以被视为变体,因为它们具有经典 B 树设计中不存在的复杂性。有关相关信息,请参阅
InnoDB
页面结构 Fil 头部 部分的 MySQL 内部手册。另请参见 哈希索引。
- 反引号
MySQL SQL 语句中的标识符必须使用反引号字符 (
`
) 引用,如果它们包含特殊字符或保留字。例如,要引用名为FOO#BAR
的表或名为SELECT
的列,您将指定标识符为`FOO#BAR`
和`SELECT`
。由于反引号提供额外的安全级别,因此它们在程序生成的 SQL 语句中被广泛使用,其中标识符名称可能事先未知。许多其他数据库系统在这些特殊名称周围使用双引号 (
"
)。为了便携性,您可以在 MySQL 中启用ANSI_QUOTES
模式并使用双引号代替反引号来限定标识符名称。另请参见 SQL。
- 备份
将 MySQL 实例中的部分或所有表数据和元数据复制到安全位置的过程。也可以指复制的文件集。对于 DBA 来说,这是一个至关重要的任务。此过程的逆过程是 恢复 操作。
使用 MySQL,物理备份 由 MySQL Enterprise Backup 产品执行,而 逻辑备份 由
mysqldump
命令执行。这些技术在备份数据的大小和表示方式以及速度(尤其是恢复操作的速度)方面具有不同的特性。备份进一步分为 热、温 或 冷 备份,具体取决于它们对正常数据库操作的干扰程度。(热备份的干扰最小,冷备份的干扰最大。)
另请参见 冷备份、热备份、逻辑备份、MySQL Enterprise Backup、mysqldump、物理备份、温备份。
- 基列
- 测试版
软件产品生命周期的早期阶段,此时它仅供评估使用,通常没有确定的发行版本号或版本号小于 1。
InnoDB
不使用测试版标识,而是更倾向于使用 早期采用者 阶段,该阶段可以跨越多个点版本,最终导致 GA 版本。- 二进制日志
包含所有试图更改表数据的语句或行更改记录的文件。二进制日志的内容可以重放,以便在 复制 场景中将副本更新到最新状态,或者在从备份恢复表数据后将数据库更新到最新状态。可以打开和关闭二进制日志功能,但 Oracle 建议在使用复制或执行备份时始终启用它。
可以使用 mysqlbinlog 命令检查二进制日志的内容,或在复制或恢复期间重放它。有关二进制日志的完整信息,请参见 第 7.4.4 节,“二进制日志”。有关与二进制日志相关的 MySQL 配置选项,请参见 第 19.1.6.4 节,“二进制日志选项和变量”。
对于 MySQL Enterprise Backup 产品,二进制日志的文件名和文件中当前的位置是重要的细节。要在复制上下文中备份时记录源的此信息,可以指定
--slave-info
选项。在 MySQL 5.0 之前,类似的功能可用,称为更新日志。在 MySQL 5.0 及更高版本中,二进制日志取代了更新日志。
另请参见 binlog、MySQL Enterprise Backup、复制。
- binlog
二进制日志 文件的非正式名称。例如,您可能会在电子邮件或论坛讨论中看到此缩写。
另请参见 二进制日志。
- 盲查询扩展
由
WITH QUERY EXPANSION
子句启用的 全文搜索 的一种特殊模式。它执行两次搜索,第二次搜索的搜索词是第一次搜索的原始搜索词与前几次搜索中最相关的几个文档串联在一起。此技术主要适用于简短的搜索词,可能只有一个词。它可以发现相关匹配项,即使搜索词在文档中没有出现。另请参见 全文搜索。
- BLOB
用于存储任何类型的二进制数据(任意大小)的对象的 SQL 数据类型(
TINYBLOB
、BLOB
、MEDIUMBLOB
和LONGBLOB
)。用于存储文档、图像、声音文件以及其他难以分解为 MySQL 表中行和列的信息。在 MySQL 应用程序中处理 BLOB 的技术因每个 连接器 和 API 而异。MySQLConnector/ODBC
将BLOB
值定义为LONGVARBINARY
。对于大型的自由格式字符数据集合,行业术语是 CLOB,由 MySQLTEXT
数据类型表示。另请参见 API、CLOB、连接器、Connector/ODBC。
- 瓶颈
系统中大小或容量受限的部分,其作用是限制整体吞吐量。例如,内存区域可能小于需要的大小;访问单个所需资源可能会阻止多个 CPU 内核同时运行;或者等待磁盘 I/O 完成可能会阻止 CPU 以全速运行。消除瓶颈往往会提高 并发性。例如,能够拥有多个
InnoDB
缓冲池 实例,在多个会话同时读写缓冲池时减少了争用。- 重启
一次 关闭 操作,紧随其后是重新启动。理想情况下,预热 时间相对较短,以便性能和吞吐量能够迅速恢复到较高水平。
另请参见 关闭。
- 伙伴分配器
- 缓冲区
用于临时存储的内存或磁盘区域。数据缓存在内存中,以便可以高效地写入磁盘,执行少量大型 I/O 操作而不是大量小型操作。数据缓存在磁盘上以提高可靠性,以便即使在最糟糕的时间发生 崩溃 或其他故障时也能恢复数据。InnoDB 使用的主要缓冲区类型是 缓冲池、双写缓冲区 和 更改缓冲区。
- 缓冲池
存储表和索引的缓存
InnoDB
数据的内存区域。为了提高大量读取操作的效率,缓冲池被划分为 页面,这些页面可能包含多个行。为了提高缓存管理的效率,缓冲池被实现为一个页面的链表;很少使用的页面会使用 LRU 算法的变体从缓存中老化。在内存较大的系统上,可以通过将缓冲池划分为多个 缓冲池实例 来提高并发性。几个
InnoDB
状态变量、INFORMATION_SCHEMA
表和performance_schema
表有助于监控缓冲池的内部工作。从 MySQL 5.6 开始,您可以在服务器关闭时保存缓冲池状态,并在服务器启动时将缓冲池恢复到相同状态,从而避免服务器重新启动后长时间的预热时间,特别是对于具有大型缓冲池的实例而言。请参见 第 17.8.3.6 节,“保存和恢复缓冲池状态”。- 缓冲池实例
缓冲池 可以划分的多个区域中的任何一个,由
innodb_buffer_pool_instances
配置选项控制。由innodb_buffer_pool_size
指定的总内存大小将被分配到所有缓冲池实例中。通常,对于分配给InnoDB
缓冲池多个千兆字节的系统来说,拥有多个缓冲池实例是合适的,每个实例为 1 千兆字节或更大。在从许多并发会话加载或查找缓冲池中的大量数据的系统上,拥有多个缓冲池实例可以减少对管理缓冲池的数据结构的独占访问的争用。另请参见 缓冲池。
- 内置
MySQL 中的内置
InnoDB
存储引擎是该存储引擎的原始分发形式。与 InnoDB 插件 相反。从 MySQL 5.5 开始,InnoDB 插件合并回 MySQL 代码库,成为内置的InnoDB
存储引擎(称为 InnoDB 1.1)。这种区别主要在 MySQL 5.1 中很重要,因为某个功能或错误修复可能适用于 InnoDB 插件,但不适用于内置的
InnoDB
,反之亦然。另请参见 InnoDB。
- 业务规则
用于运行商业公司的商业软件的基础关系和操作顺序。有时这些规则由法律规定,有时由公司政策规定。仔细规划可确保数据库编码和强制执行的关系以及通过应用程序逻辑执行的操作准确反映公司的实际策略,并能够处理现实生活中的情况。
例如,员工离开公司可能会触发人力资源部门的一系列操作。人力资源数据库可能还需要灵活地表示有关已被雇用但尚未开始工作的个人的数据。关闭在线服务的帐户可能会导致数据从数据库中删除,或者数据可能会被移动或标记,以便在重新打开帐户时可以恢复数据。公司可能会制定有关薪资最高值、最低值和调整的政策,除了基本的基本合理性检查,例如薪资不为负数。零售数据库可能不允许使用相同序列号的购买被退货多次,或者可能不允许信用卡购买超过特定价值,而用于检测欺诈的数据库可能会允许这类事情。
另请参见 关系型。
C
- .cfg 文件
与
InnoDB
可移植表空间 功能一起使用的元数据文件。它由命令FLUSH TABLES ... FOR EXPORT
生成,将一个或多个表置于一致状态,可以将其复制到另一台服务器。.cfg
文件与相应的 .ibd 文件 一起复制,并在ALTER TABLE ... IMPORT TABLESPACE
步骤中用于调整.ibd
文件的内部值,例如 空间 ID。- C
一种将可移植性与性能和对底层硬件功能的访问相结合的编程语言,使其成为编写操作系统、驱动程序和其他类型系统软件的热门选择。许多复杂的应用程序、语言和可重用模块包含用 C 编写的部分,这些部分与用其他语言编写的更高级别的组件绑定在一起。它的核心语法对于 C++、Java 和 C# 开发人员来说都很熟悉。
- C API
C API 代码与 MySQL 一起分发。它包含在 libmysqlclient 库中,并使 C 程序能够访问数据库。
另请参见 API、C、libmysqlclient。
- C#
一种将强类型和面向对象功能相结合的编程语言,在 Microsoft .NET 框架或其开源对应物 Mono 中运行。通常用于使用 ASP.net 框架创建应用程序。它的语法对于 C、C++ 和 Java 开发人员来说都很熟悉。
- C++
一种编程语言,其核心语法对 C 开发人员来说很熟悉。提供对低级操作的访问,以实现性能,并结合更高级别的类型、面向对象的功能和垃圾回收。要为 MySQL 编写 C++ 应用程序,可以使用 Connector/C++ 组件。
另请参见 C、Connector/C++。
- 缓存
- 基数
表 列 中不同值的个数。当查询引用具有关联 索引 的列时,每列的基数会影响哪种访问方法效率最高。例如,对于具有 唯一约束 的列,不同值的个数等于表中的行数。如果一个表有 100 万行,但某一列只有 10 个不同的值,那么每个值(平均)出现 100,000 次。因此,像
SELECT c1 FROM t1 WHERE c1 = 50;
这样的查询可能会返回 1 行或大量行,数据库服务器可能会根据c1
的基数以不同的方式处理查询。如果列中的值分布不均匀,则基数可能不是确定最佳查询计划的好方法。例如,
SELECT c1 FROM t1 WHERE c1 = x;
当x=50
时可能会返回 1 行,而当x=30
时可能会返回 100 万行。在这种情况下,您可能需要使用 索引提示 来传递有关哪个查找方法对于特定查询效率更高的建议。基数也可以应用于多个列中存在的不同值的个数,如 复合索引 中一样。
- 变更缓冲区
一种特殊的数据结构,用于记录对 页面 在 辅助索引 中的更改。这些值可能是由于 SQL
INSERT
、UPDATE
或DELETE
语句 (DML) 造成的。涉及变更缓冲区的特性集被称为 变更缓冲,包括 插入缓冲、删除缓冲 和 清除缓冲。只有当辅助索引中的相关页面不在 缓冲池 中时,才会在变更缓冲区中记录更改。当相关索引页面被带入缓冲池时,而相关的更改仍然在变更缓冲区中,则使用变更缓冲区中的数据在缓冲池中应用 (合并) 该页面的更改。定期,清除 操作在系统大部分处于空闲状态或在缓慢关机期间运行,将新的索引页面写入磁盘。清除操作可以比立即将每个值写入磁盘更有效地写入一系列索引值的磁盘块。
在物理上,变更缓冲区是 系统表空间 的一部分,以便索引更改在数据库重启期间保持缓冲。只有在由于某些其他读取操作而将页面带入缓冲池时,更改才会被应用 (合并)。
存储在变更缓冲区中的数据类型和数量由
innodb_change_buffering
和innodb_change_buffer_max_size
配置选项控制。要查看有关变更缓冲区中当前数据的详细信息,请发出SHOW ENGINE INNODB STATUS
命令。以前称为 插入缓冲区。
- 变更缓冲
涉及 变更缓冲区 的特性的一般术语,包括 插入缓冲、删除缓冲 和 清除缓冲。由 SQL 语句导致的索引更改通常会涉及随机 I/O 操作,这些更改会被保留并由后台 线程 定期执行。此操作序列可以比立即将每个值写入磁盘更有效地写入一系列索引值的磁盘块。由
innodb_change_buffering
和innodb_change_buffer_max_size
配置选项控制。- 检查点
随着对缓存在 缓冲池 中的数据页面的更改,这些更改将在稍后写入 数据文件,这个过程称为 刷新。检查点是已成功写入数据文件的最新更改 (由 LSN 值表示) 的记录。
- 校验和
在
InnoDB
中,当从磁盘读取 表空间 中的 页面 到InnoDB
缓冲池 中时,用于检测损坏的验证机制。此功能由 MySQL 5.5 中的innodb_checksums
配置选项控制。innodb_checksums
在 MySQL 5.6.3 中已弃用,由innodb_checksum_algorithm
替换。innochecksum 命令通过在 MySQL 服务器关闭时测试指定 表空间 文件的校验和值来帮助诊断损坏问题。
MySQL 也使用校验和进行复制。有关详细信息,请参阅配置选项
binlog_checksum
、source_verify_checksum
或master_verify_checksum
以及replica_sql_verify_checksum
或slave_sql_verify_checksum
。- 子表
在 外键 关系中,子表是指其行引用(或指向)另一个表中的行的表,这些行在特定列中具有相同的值。此表包含
FOREIGN KEY ... REFERENCES
子句,以及可选的ON UPDATE
和ON DELETE
子句。在子表中创建行之前,必须存在 父表 中的相应行。根据创建外键时使用的ON CASCADE
选项,子表中的值可以阻止父表上的删除或更新操作,或者可以导致子表中的自动删除或更新。- 干净页
InnoDB
缓冲池 中的 页,其中在内存中进行的所有更改也已写入(刷新)到 数据文件。与 脏页 相反。- 干净关闭
关闭,它在没有错误的情况下完成,并在完成之前将所有更改应用于
InnoDB
表,与 崩溃 或 快速关闭 相反。慢速关闭 的同义词。- 客户端
在数据库服务器外部运行的程序,通过发送请求通过 连接器 或 API(通过 客户端库 提供)与数据库通信。它可以在与数据库服务器相同的物理机器上运行,也可以在通过网络连接的远程机器上运行。它可以是专用的数据库应用程序,也可以是一般的程序,如 mysql 命令行处理器。
- 客户端库
包含用于处理数据库的函数集合的文件。通过使用这些库编译您的程序,或将它们安装在与您的应用程序相同的系统上,您可以在未安装 MySQL 服务器的机器上运行数据库应用程序(称为 客户端);应用程序通过网络访问数据库。使用 MySQL,您可以使用 MySQL 服务器本身的 libmysqlclient 库。
另请参阅 客户端、libmysqlclient。
- 客户端准备好的语句
一种 准备好的语句,其中缓存和重用在本地管理,模拟 服务器端准备好的语句 的功能。在历史上,一些 Connector/J、Connector/ODBC 和 Connector/PHP 开发人员使用它来解决服务器端存储过程的问题。对于现代的 MySQL 服务器版本,建议使用服务器端准备好的语句来提高性能、可扩展性和内存效率。
- CLOB
用于包含任何类型字符数据的对象的 SQL 数据类型 (
TINYTEXT
、TEXT
、MEDIUMTEXT
或LONGTEXT
),大小任意。用于存储基于文本的文档,具有关联的字符集和排序规则。在 MySQL 应用程序中处理 CLOB 的技术因每个 连接器 和 API 不同。MySQL Connector/ODBC 将TEXT
值定义为LONGVARCHAR
。对于存储二进制数据,等效项是 BLOB 类型。另请参阅 API、BLOB、连接器、Connector/ODBC。
- 聚簇索引
InnoDB
对 主键 索引的术语。InnoDB
表存储是根据主键列的值进行组织的,以加快涉及主键列的查询和排序。为了获得最佳性能,请根据性能最关键的查询仔细选择主键列。由于修改聚簇索引的列是一个昂贵的操作,因此选择很少或从不更新的主键列。在 Oracle 数据库产品中,此类型的表称为 索引组织表。
- 冷备份
- 列
行 中的数据项,其存储和语义由数据类型定义。每个 表 和 索引 主要由它包含的列集定义。
每列都有一个 基数 值。列可以是其表的 主键,也可以是主键的一部分。列可以受 唯一约束、NOT NULL 约束 或两者约束。不同列中的值,即使跨不同表,也可以通过 外键 关系链接。
在讨论 MySQL 内部操作时,有时 字段 用作同义词。
- 列索引
- 列前缀
当创建 索引 时使用长度规范,例如
CREATE INDEX idx ON t1 (c1(N))
,只有列值的开始 N 个字符存储在索引中。保持索引前缀较小会使索引紧凑,内存和磁盘 I/O 方面的节省有助于提高性能。(虽然使索引前缀太小可能会通过使具有不同值的行看起来像重复行而阻碍查询优化。)对于包含二进制值或长文本字符串的列,其中排序不是主要考虑因素,并且在索引中存储整个值会浪费空间,索引会自动使用值的开始 N(通常为 768)个字符来执行查找和排序。
另请参阅 索引。
- 命令拦截器
语句拦截器 的同义词。拦截器 设计模式的一个方面,适用于 Connector/NET 和 Connector/J。Connector/NET 称之为命令,Connector/J 称之为语句。与 异常拦截器 相反。
另请参阅 Connector/J、Connector/NET、异常拦截器、拦截器、语句拦截器。
- 提交
结束 事务 的 SQL 语句,使事务做出的任何更改永久化。它与 回滚 相反,回滚会撤消事务所做的任何更改。
InnoDB
使用 乐观 机制进行提交,以便在提交实际发生之前可以将更改写入数据文件。这种技术使提交本身更快,但代价是如果回滚,则需要做更多工作。默认情况下,MySQL 使用 自动提交 设置,该设置在每个 SQL 语句之后自动发出提交。
- 紧凑行格式
InnoDB 表的一种 行格式。从 MySQL 5.0.3 到 MySQL 5.7.8,它是 InnoDB 表的默认行格式。在 MySQL 8.0 中,默认的行格式由
innodb_default_row_format
配置选项定义,其默认设置为 DYNAMIC。与 REDUNDANT 行格式相比,COMPACT 行格式为 NULL 和可变长度列提供了更紧凑的表示方式。有关
InnoDB
COMPACT
行格式的更多信息,请参见 第 17.10 节“InnoDB 行格式”。- 组合索引
另请参阅 索引。
- 压缩备份
MySQL Enterprise Backup 产品的压缩功能会对每个表空间进行压缩复制,将扩展名从
.ibd
更改为.ibz
。压缩备份数据允许您保留更多备份,并缩短将备份传输到其他服务器的时间。在还原操作期间,数据将被解压缩。当压缩备份操作处理已压缩的表时,它会跳过该表的压缩步骤,因为再次压缩不会产生太多空间节省。由 MySQL Enterprise Backup 产品生成的一组文件,其中每个 表空间 都被压缩。压缩后的文件被重命名为
.ibz
文件扩展名。在备份过程开始时应用 压缩 有助于在压缩过程中避免存储开销,并在将备份文件传输到其他服务器时避免网络开销。应用 二进制日志 的过程需要更长的时间,并且需要解压缩备份文件。
- 压缩行格式
允许对
InnoDB
表进行数据和索引 压缩 的 行格式。与 动态行格式 一样,大型字段存储在与包含其余行数据的页面不同的页面上。索引页面和大型字段都进行了压缩,从而节省了内存和磁盘空间。根据数据的结构,内存和磁盘使用量的减少可能无法抵消解压缩数据的性能开销(因为在使用数据时需要解压缩)。有关使用详细信息,请参见 第 17.9 节“InnoDB 表和页面压缩”。有关
InnoDB
COMPRESSED
行格式的更多信息,请参见 DYNAMIC 行格式。- 压缩表
数据以压缩形式存储的表。对于
InnoDB
,它是一个使用ROW_FORMAT=COMPRESSED
创建的表。有关更多信息,请参见 第 17.9 节“InnoDB 表和页面压缩”。- 压缩
具有广泛益处的功能,包括使用更少的磁盘空间、执行更少的 I/O 以及使用更少的内存进行缓存。
InnoDB
支持表级压缩和页面级压缩。InnoDB
页面压缩也称为 透明页面压缩。有关InnoDB
压缩的更多信息,请参见 第 17.9 节“InnoDB 表和页面压缩”。另一种类型的压缩是 MySQL Enterprise Backup 产品的 压缩备份 功能。
- 压缩失败
实际上不是错误,而是使用 压缩 与 DML 操作结合使用时可能发生的昂贵操作。当出现以下情况时,会发生压缩失败:压缩 页面 的更新溢出了页面上保留用于记录修改的区域;页面被重新压缩,所有更改都应用于表数据;重新压缩的数据无法放入原始页面中,需要 MySQL 将数据拆分为两个新页面并分别压缩每个页面。要检查这种情况发生的频率,请查询
INFORMATION_SCHEMA.INNODB_CMP
表,并检查COMPRESS_OPS
列的值超过COMPRESS_OPS_OK
列的值多少。理想情况下,压缩失败不会经常发生;当发生时,您可以调整innodb_compression_level
、innodb_compression_failure_threshold_pct
和innodb_compression_pad_pct_max
配置选项。- 连接索引
请参见 组合索引。
- 并发
多个操作(在数据库术语中,为 事务)同时运行而不会相互干扰的能力。并发也与性能有关,因为理想情况下,对多个并发事务的保护以最少的性能开销工作,使用有效的 锁定 机制。
- 配置文件
包含 MySQL 在启动时使用的 选项 值的文件。传统上,在 Linux 和 Unix 上,此文件名为
my.cnf
,在 Windows 上,此文件名为my.ini
。您可以在文件的[mysqld]
部分下设置许多与 InnoDB 相关的选项。有关 MySQL 在何处搜索配置文件的信息,请参见 第 6.2.2.2 节“使用选项文件”。
当您使用 MySQL Enterprise Backup 产品时,通常使用两个配置文件:一个指定数据来源和数据结构(可能是服务器的原始配置文件),另一个是简化的配置文件,只包含一小部分选项,用于指定备份数据的位置和结构。与 MySQL Enterprise Backup 产品一起使用的配置文件必须包含某些选项,这些选项通常在常规配置文件中省略,因此您可能需要在现有配置文件中添加选项以与 MySQL Enterprise Backup 一起使用。
另请参见 my.cnf、MySQL Enterprise Backup、选项、选项文件。
- 连接
应用程序和 MySQL 服务器之间的通信通道。数据库应用程序的性能和可扩展性受数据库连接建立的速度、可以同时建立的连接数以及连接持续时间的影响。例如 主机、端口 等参数在 Connector/NET 中表示为 连接字符串,在 Connector/ODBC 中表示为 DSN。高流量系统使用称为 连接池 的优化方法。
另请参见 连接池、连接字符串、Connector/NET、Connector/ODBC、DSN、主机、端口。
- 连接池
一个缓存区域,允许在同一个应用程序内或跨不同应用程序重复使用数据库 连接,而不是为每个数据库操作设置和拆卸新的连接。此技术在 J2EE 应用程序服务器中很常见。使用 Connector/J 的 Java 应用程序可以使用 Tomcat 和其他应用程序服务器的连接池功能。重复使用对应用程序是透明的;应用程序仍然像往常一样打开和关闭连接。
另请参见 连接、Connector/J、J2EE、Tomcat。
- 连接字符串
数据库 连接 参数的表示形式,以字符串文字形式编码,以便可以在程序代码中使用。字符串的部分表示连接参数,例如 主机 和 端口。连接字符串包含多个键值对,用分号分隔。每个键值对用等号连接。常用于 Connector/NET 应用程序;有关详细信息,请参见 创建 Connector/NET 连接字符串。
另请参见 连接、Connector/NET、主机、端口。
- 连接器
MySQL 连接器为 客户端 程序提供与 MySQL 服务器的连接。几种编程语言和框架都有自己的相关连接器。与 API 提供的较低级别访问形成对比。
另请参阅 API、客户端、Connector/C++、Connector/J、Connector/NET、Connector/ODBC。
- Connector/C++
Connector/C++ 8.0 可用于访问实现 文档存储 的 MySQL 服务器,或使用传统方式使用 SQL 查询。它支持使用 X DevAPI 开发 C++ 应用程序,或使用 X DevAPI for C 开发纯 C 应用程序。它还支持使用来自 Connector/C++ 1.1 的旧版基于 JDBC 的 API 开发 C++ 应用程序。有关更多信息,请参阅 MySQL Connector/C++ 9.0 开发人员指南。
- Connector/J
一个 JDBC 驱动程序,为用 Java 编程语言开发的 客户端 应用程序提供连接。MySQL Connector/J 是一个 JDBC 类型 4 驱动程序:MySQL 协议的纯 Java 实现,不依赖于 MySQL 客户端库。有关完整详细信息,请参阅 MySQL Connector/J 开发人员指南。
- Connector/NET
用于使用 C#、.NET、Mono、Visual Studio、ASP.net 和 ADO.net 等语言、技术和框架编写应用程序的开发人员的 MySQL 连接器。
- Connector/ODBC
MySQL ODBC 驱动程序系列,通过行业标准开放数据库连接 (ODBC) API 提供对 MySQL 数据库的访问。以前称为 MyODBC 驱动程序。有关完整详细信息,请参阅 MySQL Connector/ODBC 开发人员指南。
- Connector/PHP
- 一致性读取
使用 快照 信息执行的读取操作,以基于某个时间点呈现查询结果,而不管同时运行的其他事务执行的更改。如果查询的数据已被其他事务更改,则将根据 撤消日志 的内容重建原始数据。此技术避免了某些可能降低 并发性 的 锁定 问题,因为这些问题会导致事务等待其他事务完成。
在 可重复读 隔离级别 中,快照基于执行第一个读取操作的时间。在 已提交读 隔离级别中,快照将重置为每次一致性读取操作的时间。
一致性读取是
InnoDB
在 已提交读 和 可重复读 隔离级别中处理SELECT
语句的默认模式。由于一致性读取不会对它访问的表设置任何锁定,因此其他会话可以在对表执行一致性读取时修改这些表。有关适用隔离级别的技术详细信息,请参阅 第 17.7.2.3 节,“一致性非锁定读取”。
- 约束
一种可以阻止数据库更改以防止数据变得不一致的自动测试。(在计算机科学术语中,一种与不变条件相关的断言。)约束是维护数据一致性的 ACID 原则的关键组成部分。MySQL 支持的约束包括 外键约束 和 唯一约束。
- 计数器
通过特定类型的
InnoDB
操作递增的值。对于测量服务器的繁忙程度、排查性能问题的来源以及测试更改(例如,对配置设置或查询使用的索引的更改)是否具有预期的低级效果很有用。可以通过 性能模式 表和 INFORMATION_SCHEMA 表(尤其是INFORMATION_SCHEMA.INNODB_METRICS
)访问不同类型的计数器。另请参阅 INFORMATION_SCHEMA、度量计数器、性能模式。
- 覆盖索引
包含查询检索的所有列的 索引。查询不是使用索引值作为指针来查找完整的表行,而是从索引结构中返回值,从而节省了磁盘 I/O。
InnoDB
可以对 MyISAM 可用的更多索引应用此优化技术,因为InnoDB
辅助索引 还包括 主键 列。InnoDB
无法对事务修改的表的查询应用此技术,直到该事务结束。任何 列索引 或 组合索引 都可以充当覆盖索引,前提是查询正确。设计索引和查询以尽可能地利用此优化技术。
- CPU 密集型
一种类型的 工作负载,其中主要 瓶颈 是内存中的 CPU 操作。通常涉及读取密集型操作,其中所有结果都可以缓存到 缓冲池 中。
- 崩溃
MySQL 使用术语 “崩溃” 来泛指服务器无法执行其正常清理的任何意外 关闭 操作。例如,崩溃可能是由于数据库服务器机器或存储设备上的硬件故障、电源故障、可能导致 MySQL 服务器停止运行的数据不匹配、DBA 启动的 快速关闭 或许多其他原因造成的。针对 InnoDB 表的健壮、自动 崩溃恢复 确保在重新启动服务器时数据变得一致,而无需 DBA 做任何额外工作。
- 崩溃恢复
在 MySQL 发生 崩溃 后再次启动时发生的清理活动。对于 InnoDB 表,使用 重做日志 中的数据重放来自未完成事务的更改。在崩溃之前已 提交 但尚未写入 数据文件 的更改将从 双写缓冲区 中重建。当数据库正常关闭时,此类活动将在关闭过程中由 清除 操作执行。
在正常操作期间,提交的数据可以存储在 更改缓冲区 中一段时间,然后再写入数据文件。在保持数据文件最新(这会在正常操作期间引入性能开销)和缓冲数据(这会使关闭和崩溃恢复花费更长时间)之间始终存在权衡。
- CRUD
代表 “创建、读取、更新、删除” 的首字母缩写词,数据库应用程序中常见的一系列操作。通常表示一类数据库使用相对简单的应用程序(DDL、DML 和 查询 语句在 SQL 中),这些应用程序可以在任何语言中快速实现。
- 游标
一个内部 MySQL 数据结构,表示 SQL 语句的结果集。通常与 预处理语句 和 动态 SQL 一起使用。它就像其他高级语言中的迭代器一样,根据需要产生结果集中的每个值。
虽然 SQL 通常会为您处理游标的处理,但在处理性能关键代码时,您可能会深入了解其内部工作原理。
D
- 数据定义语言
请参阅 DDL。
- 数据字典
用于跟踪数据库对象(如 表、索引 和表 列)的元数据。对于 MySQL 8.0 中引入的 MySQL 数据字典,元数据实际上位于
InnoDB
文件表空间 文件中,这些文件位于mysql
数据库目录中。对于InnoDB
数据字典,元数据实际上位于InnoDB
系统表空间 中。由于 MySQL Enterprise Backup 产品始终备份
InnoDB
系统表空间,因此所有备份都包含InnoDB
数据字典的内容。- 数据目录
每个 MySQL 实例 用于保存
InnoDB
的 数据文件 和代表各个数据库的目录的目录。由datadir
配置选项控制。- 数据文件
InnoDB
系统表空间 包含InnoDB
数据字典 并且能够保存多个InnoDB
表的数据,它由一个或多个.ibdata
数据文件表示。文件表空间用于保存单个
InnoDB
表的数据,它由一个.ibd
数据文件表示。通用表空间(在 MySQL 5.7.6 中引入),用于保存多个
InnoDB
表的数据,也由一个.ibd
数据文件表示。- 数据操作语言
参见 DML.
- 数据仓库
主要运行大型 查询 的数据库系统或应用程序。只读或主要读数据可能会以 非规范化 形式组织,以提高查询效率。可以从 MySQL 5.6 及更高版本中的 只读事务 优化中获益。与 OLTP 相比。
- 数据库
在 MySQL 数据目录 中,每个数据库都由一个单独的目录表示。InnoDB 系统表空间 可以保存 MySQL 实例 中多个数据库的表数据,它保存在位于各个数据库目录之外的 数据文件 中。启用 文件表空间 模式后,表示单个 InnoDB 表的 .ibd 文件 将存储在数据库目录中,除非使用
DATA DIRECTORY
子句在其他地方创建。在 MySQL 5.7.6 中引入的通用表空间也保存 .ibd 文件 中的表数据。与文件表空间 .ibd 文件 不同,通用表空间 .ibd 文件 可以保存 MySQL 实例 中多个数据库的表数据,并且可以分配到与 MySQL 数据目录相关的或独立于 MySQL 数据目录的目录中。对于使用 MySQL 长时间的用户来说,数据库是一个熟悉的概念。来自 Oracle 数据库背景的用户可能会发现 MySQL 中数据库的含义更接近 Oracle 数据库中所谓的 模式。
- DCL
数据控制语言,一组用于管理权限的 SQL 语句。在 MySQL 中,包括
GRANT
和REVOKE
语句。与 DDL 和 DML 相比。- DDEX 提供程序
一项功能,允许您使用 Visual Studio 中的数据设计工具来操作 MySQL 数据库中的模式和对象。对于使用 Connector/NET 的 MySQL 应用程序,MySQL Visual Studio 插件在 MySQL 5.0 及更高版本中充当 DDEX 提供程序。
另请参见 Visual Studio.
- DDL
数据定义语言,一组用于操作数据库本身而不是单个表行的 SQL 语句。包括所有形式的
CREATE
、ALTER
和DROP
语句。还包括TRUNCATE
语句,因为它与DELETE FROM
语句的工作方式不同,即使最终效果相似。table_name
DDL 语句会自动 提交 当前 事务;它们不能 回滚。
InnoDB
在线 DDL 功能增强了CREATE INDEX
、DROP INDEX
和许多类型ALTER TABLE
操作的性能。有关更多信息,请参见 第 17.12 节,“InnoDB 和在线 DDL”。此外,InnoDB
文件表空间 设置可能会影响DROP TABLE
和TRUNCATE TABLE
操作的行为。与 DML 和 DCL 相比。
- 死锁
不同的 事务 无法继续执行的情况,因为每个事务都持有一个对方需要的 锁。由于两个事务都在等待资源可用,因此它们都不会释放它们持有的锁。
当事务以相反的顺序锁定多个表中的行时(通过
UPDATE
或SELECT ... FOR UPDATE
等语句),可能会发生死锁。当此类语句锁定索引记录范围和 间隙 时,也可能会发生死锁,每个事务由于时间问题而获取了一些锁,但没有获取其他锁。有关如何自动检测和处理死锁的背景信息,请参见 第 17.7.5.2 节,“死锁检测”。有关避免和恢复死锁情况的提示,请参见 第 17.7.5.3 节,“如何最大限度地减少和处理死锁”.
- 死锁检测
一种机制,用于在发生 死锁 时自动检测,并自动 回滚 涉及的其中一个 事务(受害者)。可以使用
innodb_deadlock_detect
配置选项禁用死锁检测。- 删除
当
InnoDB
处理DELETE
语句时,行会立即被标记为已删除,并且不再被查询返回。存储会在以后的某个时间被回收,在称为 清除 操作的定期垃圾回收期间。对于删除大量数据,具有自己性能特征的相关操作是 TRUNCATE 和 DROP。- 删除缓冲
将
DELETE
操作导致的二级索引页更改存储在 更改缓冲区 中而不是立即写入更改的技术,以便可以执行物理写入以最大限度地减少随机 I/O。(由于删除操作是一个两步过程,因此此操作缓冲通常标记索引记录以供删除的写入。)它是 更改缓冲 的类型之一;其他类型是 插入缓冲 和 清除缓冲。- 非规范化
一种数据存储策略,它将数据复制到不同的表中,而不是使用 外键 和 联接 查询链接这些表。通常用于 数据仓库 应用程序,其中数据在加载后不会更新。在此类应用程序中,查询性能比在更新期间维护一致数据更为重要。与 规范化 相比。
- 降序索引
一种索引,其中索引存储经过优化以处理
ORDER BY
子句。column
DESC另请参阅 索引。
- 字典对象缓存
字典对象缓存将之前访问过的数据字典对象存储在内存中,以实现对象重用并最大限度地减少磁盘 I/O。使用基于LRU 的逐出策略将最少使用的对象从内存中逐出。缓存由几个分区组成,每个分区存储不同的对象类型。
有关更多信息,请参见 第 16.4 节,“字典对象缓存”。
- 脏页
- 脏读
获取不可靠数据的操作,即由另一个事务更新但尚未提交的数据。这只有在被称为隔离级别的读未提交下才有可能。
这种操作不符合数据库设计的ACID 原则。它被认为非常危险,因为数据可能被回滚,或者在提交之前进一步更新;然后,执行脏读的事务将使用从未确认准确性的数据。
它的反义词是一致性读,其中
InnoDB
确保事务不会读取另一个事务更新的信息,即使另一个事务同时提交。- 基于磁盘的
一种主要在磁盘存储(硬盘或等效设备)上组织数据的数据库。数据在磁盘和内存之间来回传输以进行操作。它与内存数据库相反。尽管
InnoDB
是基于磁盘的,但它还包含缓冲池、多个缓冲池实例和自适应哈希索引 等功能,允许某些类型的负载主要从内存中工作。- 磁盘绑定
一种负载,其中主要瓶颈 是磁盘 I/O。(也称为I/O 绑定。)通常涉及频繁写入磁盘,或者随机读取比缓冲池中可以容纳的更多数据。
- DML
数据操作语言,用于执行
INSERT
、UPDATE
和DELETE
操作的一组SQL 语句。SELECT
语句有时被认为是 DML 语句,因为SELECT ... FOR UPDATE
形式与INSERT
、UPDATE
和DELETE
相同,需要考虑锁定。用于
InnoDB
表的 DML 语句在事务的上下文中操作,因此它们的效果可以作为单个单元提交或回滚。与DDL 和DCL 相比。
- 文档 ID
在
InnoDB
全文搜索 功能中,包含FULLTEXT 索引 的表中的一个特殊列,用于唯一标识与每个ilist 值关联的文档。它的名称是FTS_DOC_ID
(需要大写)。列本身必须是BIGINT UNSIGNED NOT NULL
类型,并具有名为FTS_DOC_ID_INDEX
的唯一索引。最好在创建表时定义此列。如果InnoDB
必须在创建FULLTEXT
索引时将该列添加到表中,则索引操作会非常昂贵。另请参见 全文搜索、FULLTEXT 索引、ilist。
- 双写缓冲区
InnoDB
使用一种称为双写的文件刷新技术。在将页写入数据文件之前,InnoDB
首先将它们写入一个称为双写缓冲区的存储区域。只有在写入和刷新到双写缓冲区完成之后,InnoDB
才会将页写入数据文件中的适当位置。如果在页写入过程中发生操作系统、存储子系统或 mysqld 进程崩溃,则InnoDB
可以在崩溃恢复期间从双写缓冲区找到页的良好副本。尽管数据始终被写入两次,但双写缓冲区不需要两倍的 I/O 负载或两倍的 I/O 操作。数据作为大块连续数据写入缓冲区本身,并对操作系统进行单个
fsync()
调用。- 删除
一种DDL 操作,通过诸如
DROP TABLE
或DROP INDEX
之类的语句来删除模式对象。它在内部映射到ALTER TABLE
语句。从InnoDB
的角度来看,此类操作的性能注意事项包括数据字典 被锁定以确保所有相关对象都被更新的时间,以及更新内存结构(例如缓冲池)的时间。对于表,删除操作与截断操作(TRUNCATE TABLE
语句)略有不同。- DSN
“数据库源名称” 的缩写。它是连接器/ODBC 中连接信息的编码。有关完整详细信息,请参见 在 Windows 上配置 Connector/ODBC DSN。它相当于连接器/NET 使用的连接字符串。
- 动态游标
ODBC 支持的一种游标,当再次读取行时,它可以获取新的和已更改的结果。更改对游标的可见性以及可见速度取决于所涉及的表类型(事务性或非事务性)以及事务性表的隔离级别。对动态游标的支持必须显式启用。
- 动态行格式
InnoDB
行格式。因为长可变长度列值存储在包含行数据的页之外,所以它对于包含大型对象的行非常有效。由于大型字段通常不会被访问以评估查询条件,因此它们不会被频繁地带入缓冲池,从而导致更少的 I/O 操作和更好地利用缓存内存。从 MySQL 5.7.9 开始,默认行格式由
innodb_default_row_format
定义,其默认值为DYNAMIC
。有关
InnoDB
DYNAMIC
行格式的更多信息,请参见 DYNAMIC 行格式。- 动态 SQL
一项功能,使您能够创建和执行预处理语句,使用比简单地将语句各个部分连接到字符串变量中更强大、更安全、更有效的方法来替换参数值。
另请参见 预处理语句。
- 动态语句
E
- 早期采用者
一个类似于 测试版 的阶段,在这个阶段,软件产品通常在一个非关键任务的环境中进行性能、功能和兼容性评估。
另请参阅 测试版。
- Eiffel
一种编程语言,包含许多面向对象的特性。它的一些概念对 Java 和 C# 开发人员来说很熟悉。有关 MySQL 的开源 Eiffel API,请参阅 第 31.13 节,“MySQL Eiffel Wrapper”。
- 嵌入式
嵌入式 MySQL 服务器库 (libmysqld) 使在 客户端 应用程序中运行功能齐全的 MySQL 服务器成为可能。主要优势包括提高速度以及简化嵌入式应用程序的管理。
- 错误日志
一种 日志 类型,显示有关 MySQL 启动、关键运行时错误和 崩溃 信息的信息。有关详细信息,请参阅 第 7.4.2 节,“错误日志”。
- 逐出
从缓存或其他临时存储区域(例如
InnoDB
缓冲池)中删除项目的流程。通常(但并非总是)使用 LRU 算法来确定要删除哪个项目。当一个 脏页 被逐出时,其内容会被 刷新 到磁盘,任何脏的 相邻页 也可能被刷新。- 异常拦截器
一种 拦截器 类型,用于跟踪、调试或增强数据库应用程序遇到的 SQL 错误。例如,拦截器代码可以发出
SHOW WARNINGS
语句以检索更多信息,并添加描述性文本,甚至更改返回给应用程序的异常类型。由于拦截器代码仅在 SQL 语句返回错误时才会被调用,因此它不会在正常(无错误)操作期间对应用程序性能造成任何影响。在使用 Connector/J 的 Java 应用程序中,设置这种类型的拦截器涉及实现
com.mysql.jdbc.ExceptionInterceptor
接口,并在 连接字符串 中添加exceptionInterceptors
属性。在使用 Connector/NET 的 Visual Studio 应用程序中,设置这种类型的拦截器涉及定义一个从
BaseExceptionInterceptor
类继承的类,并将该类名指定为连接字符串的一部分。- 排他锁
一种 锁,它可以防止任何其他 事务 锁定同一行。根据事务 隔离级别,这种锁可能会阻止其他事务写入同一行,也可能会阻止其他事务读取同一行。默认的
InnoDB
隔离级别,可重复读,通过允许事务读取具有排他锁的行来实现更高的 并发性,这种技术被称为 一致性读取。- 区
表空间 中的一组 页。对于默认的 页大小 16KB,一个区包含 64 个页。在 MySQL 5.6 中,
InnoDB
实例的页大小可以是 4KB、8KB 或 16KB,由innodb_page_size
配置选项控制。对于 4KB、8KB 和 16KB 的页大小,区大小始终为 1MB(或 1048576 字节)。对 32KB 和 64KB 的
InnoDB
页大小的支持已在 MySQL 5.7.6 中添加。对于 32KB 的页大小,区大小为 2MB。对于 64KB 的页大小,区大小为 4MB。InnoDB
功能(例如 段、预读 请求和 双写缓冲区)使用一次读取、写入、分配或释放数据的 I/O 操作。每次操作一个区。
F
- .frm 文件
包含 MySQL 表元数据(例如表定义)的文件。
.frm
文件在 MySQL 8.0 中已被删除,但在更早版本的 MySQL 中仍在使用。在 MySQL 8.0 中,以前存储在.frm
文件中的数据存储在 数据字典 表中。另请参阅 数据字典,MySQL Enterprise Backup,系统表空间。
- 故障转移
在发生故障的情况下自动切换到备用服务器的能力。在 MySQL 上下文中,故障转移涉及一个备用数据库服务器。通常在 J2EE 环境中由应用程序服务器或框架支持。
另请参阅 Connector/J,J2EE。
- 快速索引创建
InnoDB 插件中首次引入的功能,现在是 MySQL 5.5 及更高版本的一部分,它通过避免完全重写关联的表来加速
InnoDB
辅助索引 的创建。加速也适用于删除辅助索引。由于索引维护可能会给许多数据传输操作增加性能开销,因此请考虑在没有任何辅助索引的情况下执行诸如
ALTER TABLE ... ENGINE=INNODB
或INSERT INTO ... SELECT * FROM ...
之类的操作,并在之后创建索引。在 MySQL 5.6 中,此功能变得更加通用。您可以在创建索引时读取和写入表,并且可以在不复制表、不阻止 DML 操作或同时不进行这两项操作的情况下执行更多类型的
ALTER TABLE
操作。因此,在 MySQL 5.6 及更高版本中,这组功能被称为 在线 DDL 而不是快速索引创建。有关相关信息,请参阅 第 17.12 节,“InnoDB 和在线 DDL”。
- 快速关闭
InnoDB
的默认 关闭 过程,基于配置设置innodb_fast_shutdown=1
。为了节省时间,会跳过某些 刷新 操作。这种类型的关闭在正常使用期间是安全的,因为刷新操作会在下次启动期间执行,使用与 崩溃恢复 中相同的机制。在数据库因升级或降级而被关闭的情况下,请执行 缓慢关闭,以确保在关闭期间将所有相关更改应用于 数据文件。- 文件格式
- 每个表一个文件
由
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 Enterprise Backup 产品对于位于其自身文件中的表更灵活。例如,可以将表从备份中排除,但前提是它们位于单独的文件中。因此,此设置适用于不太频繁备份或按不同计划备份的表。
另请参阅 压缩行格式,压缩,文件格式,.ibd 文件,ibdata 文件,innodb_file_per_table,MySQL Enterprise Backup,行格式,系统表空间。
- 填充因子
在
InnoDB
索引 中,页面分裂之前索引数据占用的页面比例。当索引数据最初在页面之间分配时,未使用的空间允许行更新为更长的字符串值,而无需进行代价高昂的索引维护操作。如果填充因子过低,索引会比需要消耗更多空间,从而在读取索引时导致额外的 I/O 负担。如果填充因子过高,任何增加列值长度的更新都会导致索引维护的额外 I/O 负担。有关更多信息,请参见 第 17.6.2.2 节,“InnoDB 索引的物理结构”。- 固定行格式
此行格式由
MyISAM
存储引擎使用,而不是由InnoDB
使用。如果您在 MySQL 5.7.6 或更早版本中使用选项ROW_FORMAT=FIXED
创建InnoDB
表,则InnoDB
会使用 紧凑行格式,尽管FIXED
值可能仍然显示在SHOW TABLE STATUS
报告等输出中。从 MySQL 5.7.7 开始,如果指定了ROW_FORMAT=FIXED
,则InnoDB
会返回错误。- 刷新
将缓冲在内存区域或临时磁盘存储区域中的数据库文件更改写入磁盘。定期刷新的
InnoDB
存储结构包括 重做日志、回滚日志 和 缓冲池。刷新可能会发生,因为内存区域已满,系统需要释放一些空间,因为 提交 操作意味着可以完成事务的更改,或者因为 缓慢关闭 操作意味着应完成所有未完成的工作。当不需要立即刷新所有缓冲数据时,
InnoDB
可以使用一种称为 模糊检查点 的技术来刷新小批页面,以分散 I/O 负担。- 刷新列表
一个内部
InnoDB
数据结构,用于跟踪 脏页面 在 缓冲池 中:即已更改且需要写回磁盘的 页面。此数据结构由InnoDB
内部 迷你事务 频繁更新,因此受其自身的 互斥锁 保护,以允许对缓冲池进行并发访问。- 外键
一种指针关系,位于不同
InnoDB
表中的行之间。外键关系在 父表 和 子表 中的某一列上定义。除了能够快速查找相关信息之外,外键还有助于强制执行 参照完整性,方法是防止任何这些指针在插入、更新和删除数据时变得无效。此强制机制是一种 约束。如果相关外键值在其他表中不存在,则无法插入指向其他表的行。如果删除行或更改其外键值,并且其他表中的行指向该外键值,则可以设置外键以阻止删除,将其他表中的相应列值更改为 NULL,或者自动删除其他表中的相应行。
设计 规范化 数据库的阶段之一是识别重复的数据,将该数据分离到一个新表中,并建立外键关系,以便可以使用 连接 操作像查询单个表一样查询多个表。
- FOREIGN KEY 约束
通过 外键 关系维护数据库一致性的 约束 类型。与其他类型的约束一样,它可以阻止插入或更新数据,如果数据变得不一致;在这种情况下,要防止的不一致是多个表中的数据之间的不一致。或者,当执行 DML 操作时,
FOREIGN KEY
约束可以导致 子行 中的数据被删除、更改为不同的值或设置为 NULL,这取决于创建外键时指定的ON CASCADE
选项。- FTS
- 完整备份
- 全表扫描
一种需要读取表的所有内容的操作,而不是仅使用 索引 读取选定的部分。通常在小型查找表或数据仓库环境中使用大型表,其中所有可用数据都将聚合和分析。这些操作的频率以及表相对于可用内存的大小对查询优化和管理 缓冲池 中使用的算法有影响。
索引的目的是允许在大型表中查找特定值或值范围,从而在实际情况下避免全表扫描。
- 全文搜索
MySQL 功能,用于在表数据中查找单词、短语、单词的布尔组合等等,以比使用 SQL
LIKE
运算符或编写您自己的应用程序级搜索算法更快、更方便、更灵活的方式。它使用 SQL 函数MATCH()
和 FULLTEXT 索引。另请参见 FULLTEXT 索引。
- FULLTEXT 索引
一种特殊的 索引,用于保存 MySQL 全文搜索 机制中的 搜索索引。表示来自列值的单词,省略所有指定为 停用词 的单词。最初,仅适用于
MyISAM
表。从 MySQL 5.6.4 开始,它也适用于 InnoDB 表。- 模糊检查点
G
- GA
“普遍可用”,软件产品离开 测试版 并可供销售、官方支持和生产使用的阶段。
另请参阅 测试版。
- GAC
“全局程序集缓存” 的首字母缩略词。一个用于在 .NET 系统上存储库 (程序集) 的中心区域。在物理上由嵌套文件夹组成,由 .NET CLR 视为单个虚拟文件夹。
- 间隙
InnoDB
索引 数据结构中的一个位置,可以插入新的值。当您使用诸如SELECT ... FOR UPDATE
的语句锁定一组行时,InnoDB
可以创建适用于间隙以及索引中实际值的锁。例如,如果您选择所有大于 10 的值进行更新,则间隙锁会阻止另一个事务插入大于 10 的新值。最大记录 和 最小记录 代表包含所有大于或小于所有当前索引值的间隙。- 间隙锁
指索引记录之间间隙上的 锁,或者第一个索引记录之前或最后一个索引记录之后的间隙上的锁。例如,
SELECT c1 FROM t WHERE c1 BETWEEN 10 and 20 FOR UPDATE;
会阻止其他事务将值 15 插入到列t.c1
中,无论该列中之前是否存在该值,因为该范围内所有现有值之间的间隙都被锁定。与 记录锁 和 下一键锁 相比。间隙锁是性能和 并发性 之间权衡的一部分,在某些事务 隔离级别 中使用,而在其他隔离级别中不使用。
- 通用日志
请参阅 通用查询日志。
- 通用查询日志
用于诊断和排查 MySQL 服务器处理的 SQL 语句的 日志 类型。可以存储在文件或数据库表中。您必须通过
general_log
配置选项启用此功能才能使用它。您可以通过sql_log_off
配置选项为特定连接禁用它。记录比 慢查询日志 更广泛的查询范围。与用于复制的 二进制日志 不同,通用查询日志包含
SELECT
语句,并且不维护严格的排序。有关更多信息,请参见 第 7.4.3 节,“通用查询日志”。- 通用表空间
使用
CREATE TABLESPACE
语法创建的共享InnoDB
表空间。通用表空间可以在 MySQL 数据目录之外创建,能够容纳多个 表,并支持所有行格式的表。通用表空间是在 MySQL 5.7.6 中引入的。使用
CREATE TABLE
或tbl_name
... TABLESPACE [=]tablespace_name
ALTER TABLE
语法将表添加到通用表空间。tbl_name
TABLESPACE [=]tablespace_name
与 系统表空间 和 每个表一个文件 表空间形成对比。
有关更多信息,请参见 第 17.6.3.3 节,“通用表空间”。
- 生成列
- 存储的生成列
请参阅 存储的生成列。
- 虚拟生成列
请参阅 虚拟生成列。
- Glassfish
另请参阅 J2EE。
- 全局临时表空间
一个 临时表空间,用于存储对用户创建的临时表所做的更改的 回滚段。
另请参阅 临时表空间。
- 全局事务
参与 XA 操作的 事务 类型。它由几个本身是事务性的操作组成,但所有操作必须作为一个组成功完成,或者作为一个组回滚。本质上,这将 ACID 属性扩展到““更高一个级别””,以便多个 ACID 事务可以作为一个组执行,作为具有 ACID 属性的全局操作的组成部分。
- 组提交
- GUID
““全局唯一标识符” 的缩写,是一个 ID 值,可用于跨不同数据库、语言、操作系统等关联数据。(作为使用顺序整数的替代方案,在不同的表、数据库等中,相同的值可能指的是不同的数据。)旧版本的 MySQL 将其表示为
BINARY(16)
。当前,它表示为CHAR(36)
。MySQL 有一个UUID()
函数,它以字符格式返回 GUID 值,还有一个UUID_SHORT()
函数,它以整数格式返回 GUID 值。由于连续的 GUID 值不一定按升序排列,因此它不是作为大型 InnoDB 表的 主键使用的有效值。
H
- 哈希索引
一种 索引 类型,适用于使用等式运算符而不是范围运算符(如大于或
BETWEEN
)的查询。它适用于MEMORY
表。尽管由于历史原因,哈希索引是MEMORY
表的默认值,但该存储引擎也支持 B 树 索引,这通常是通用查询的更好选择。MySQL 包含这种索引类型的变体,即 自适应哈希索引,它会根据运行时条件自动为
InnoDB
表构建(如果需要)。- HDD
““硬盘驱动器” 的缩写。指使用旋转磁盘的存储介质,通常在与 SSD 进行比较和对比时使用。它的性能特征会影响 基于磁盘的 工作负载的吞吐量。
- 心跳
指示系统正常运行的定期消息。在 复制 上下文中,如果 源 停止发送此类消息,则其中一个 副本 可以代替它。类似的技术可以在集群环境中的服务器之间使用,以确认所有服务器都正常运行。
- 高水位线
一个表示上限的值,可以是运行时不应超过的硬限制,也可以是实际达到的最大值的记录。与 低水位线 相比。
另请参阅 低水位线。
- 历史记录列表
由
InnoDB
清除 操作计划处理的 事务 列表,其中包含已删除标记的记录。记录在 撤消日志 中。命令SHOW ENGINE INNODB STATUS
报告了历史记录列表的长度。如果历史记录列表的长度超过了innodb_max_purge_lag
配置选项的值,则每个 DML 操作都会稍微延迟,以使清除操作能够完成 刷新 已删除的记录。也称为 清除延迟。
- 打孔
从页面中释放空块。
InnoDB
透明页面压缩 功能依赖于打孔支持。有关更多信息,请参见 第 17.9.2 节,“InnoDB 页面压缩”。- 主机
数据库服务器的网络名称,用于建立 连接。通常与 端口 结合使用。在某些情况下,IP 地址
127.0.0.1
比特殊名称localhost
更适合用于访问与应用程序位于同一服务器上的数据库。- 热点
指行、表或内部数据结构被频繁访问,需要某种形式的锁定或互斥,从而导致性能或可扩展性问题。
虽然““热点” 通常表示不希望出现的状况,但 热备份 是首选的备份类型。
另请参阅 热备份。
- 热备份
在数据库运行期间,应用程序正在读取和写入数据时进行的备份。备份不仅仅是复制数据文件:它必须包含备份过程中插入或更新的任何数据;它必须排除备份过程中删除的任何数据;它必须忽略未提交的任何更改。
执行热备份的 Oracle 产品,特别是针对
InnoDB
表,但也针对MyISAM
和其他存储引擎的表,被称为 MySQL Enterprise Backup。热备份过程包含两个阶段。对数据文件的初始复制会生成一个 原始备份。应用 步骤将合并备份运行期间发生的数据库的任何更改。应用更改会生成一个 准备好的 备份;这些文件随时可以恢复。
另请参见 应用、MySQL Enterprise Backup、准备好的备份、原始备份。
I
- .ibd 文件
每个表一个文件 表空间和一般表空间的数据文件。每个表一个文件表空间
.ibd
文件包含单个表和相关索引数据。一般表空间.ibd
文件可以包含多个表的表和索引数据。.ibd
文件扩展名不适用于 系统表空间,系统表空间由一个或多个 ibdata 文件 组成。如果使用
DATA DIRECTORY =
子句创建每个表一个文件表空间或一般表空间,则.ibd
文件位于指定的路径,位于常规数据目录之外。当 MySQL Enterprise Backup 产品将
.ibd
文件包含在压缩备份中时,压缩后的等效文件为.ibz
文件。另请参见 数据库、每个表一个文件、一般表空间、ibdata 文件、.ibz 文件、innodb_file_per_table、MySQL Enterprise Backup、系统表空间。
- .ibz 文件
当 MySQL Enterprise Backup 产品执行 压缩备份 时,它会将使用 每个表一个文件 设置创建的每个 表空间 文件从
.ibd
扩展名转换为.ibz
扩展名。备份期间应用的压缩不同于在正常操作期间压缩表数据的 压缩行格式。压缩备份操作会跳过对已经采用压缩行格式的表空间的压缩步骤,因为再次压缩会降低备份速度,但不会节省太多空间。
另请参见 压缩备份、压缩行格式、每个表一个文件、.ibd 文件、MySQL Enterprise Backup、表空间。
- I/O 绑定
请参见 磁盘绑定。
- ib 文件集
由
InnoDB
在 MySQL 数据库中管理的文件集:系统表空间、每个表一个文件 表空间文件和 重做日志 文件。根据 MySQL 版本和InnoDB
配置,也可能包含 一般表空间、临时表空间 和 回滚表空间 文件。此术语有时用于详细讨论InnoDB
文件结构和格式,以指代由InnoDB
在 MySQL 数据库中管理的文件集。- ibbackup_logfile
在 MySQL Enterprise Backup 产品执行 热备份 操作期间创建的补充备份文件。它包含有关备份运行期间发生的任何数据更改的信息。初始备份文件(包括
ibbackup_logfile
)被称为 原始备份,因为在备份操作期间发生的更改尚未合并。在您对原始备份文件执行 应用 步骤后,生成的文件将包括这些最终数据更改,并被称为 准备好的备份。在此阶段,ibbackup_logfile
文件不再需要。另请参见 应用、热备份、MySQL Enterprise Backup、准备好的备份、原始备份。
- ibdata 文件
一组文件,名称如
ibdata1
、ibdata2
等,构成InnoDB
系统表空间。有关驻留在系统表空间ibdata
文件中的结构和数据的详细信息,请参见 第 17.6.3.1 节,“系统表空间”。ibdata
文件的增长受innodb_autoextend_increment
配置选项的影响。另请参见 更改缓冲区、数据字典、双写缓冲区、每个表一个文件、.ibd 文件、innodb_file_per_table、系统表空间、回滚日志。
- ibtmp 文件
用于非压缩
InnoDB
临时表 和相关对象的InnoDB
临时表空间 数据文件。配置文件选项innodb_temp_data_file_path
允许用户为临时表空间数据文件定义相对路径。如果未指定innodb_temp_data_file_path
,则默认行为是在数据目录中创建名为ibtmp1
的单个自动扩展 12MB 数据文件,与ibdata1
并列。- ib_logfile
一组文件,通常名为
ib_logfile0
和ib_logfile1
,构成 重做日志。也称为 日志组。这些文件记录尝试更改InnoDB
表中的数据的语句。这些语句会在启动后自动重放,以纠正由未完成的事务写入的数据,以纠正崩溃后的启动。此数据不能用于手动恢复;对于该类型的操作,请使用 二进制日志。
- ilist
在
InnoDB
FULLTEXT 索引 中,由文档 ID 和令牌的词位信息(即特定单词)组成的数据结构。另请参见 FULLTEXT 索引。
- 隐式行锁
InnoDB
为确保一致性而获取的行锁,而无需您专门请求它。另请参见 行锁。
- 内存数据库
一种类型的数据库系统,它将数据保存在内存中,以避免因磁盘 I/O 和磁盘块与内存区域之间的转换而产生的开销。一些内存数据库会牺牲持久性(“D” 在 ACID 设计理念中),并且容易受到硬件、电源和其他类型故障的影响,这使得它们更适合只读操作。其他内存数据库确实使用持久性机制,例如将更改记录到磁盘或使用非易失性内存。
MySQL 的功能可以解决相同类型的内存密集型处理,包括
InnoDB
缓冲池、自适应哈希索引 和 只读事务 优化、MEMORY
存储引擎、MyISAM
密钥缓存和 MySQL 查询缓存。- 增量备份
一种类型的 热备份,由 MySQL Enterprise Backup 产品执行,它只保存自某个时间点以来更改的数据。拥有一个完整备份和一系列增量备份可以使您在很长一段时间内重建备份数据,而无需将几个完整备份保留在手边带来的存储开销。您可以恢复完整备份,然后依次应用每个增量备份,或者通过将每个增量备份应用于完整备份来保持完整备份的最新状态,然后执行一次恢复操作。
更改数据的粒度在 页 级别。一个页实际上可能覆盖不止一行。每个更改的页都包含在备份中。
另请参见 热备份、MySQL Enterprise Backup、页。
- 索引
一种数据结构,它为 表 的 行 提供快速查找功能,通常通过形成树结构(B 树)来表示特定 列 或一组列的所有值。
InnoDB
表总是具有一个代表主键的聚簇索引。它们还可以在一个或多个列上定义一个或多个辅助索引。根据它们的结构,辅助索引可以被归类为部分、列或组合索引。索引是查询性能的关键方面。数据库架构师设计表、查询和索引以允许快速查找应用程序所需的数据。理想的数据库设计使用覆盖索引(在实际情况下);查询结果完全从索引中计算出来,无需读取实际的表数据。每个外键约束也需要一个索引,以便有效地检查值是否存在于父表和子表中。
虽然 B 树索引是最常见的,但哈希索引使用不同的数据结构,就像在
MEMORY
存储引擎和InnoDB
的自适应哈希索引中一样。R 树索引用于多维信息的空间索引。另请参阅 自适应哈希索引、B 树、子表、聚簇索引、列索引、组合索引、覆盖索引、外键、哈希索引、父表、部分索引、主键、查询、R 树、行、辅助索引、表。
- 索引缓存
一个内存区域,用于保存
InnoDB
全文搜索的令牌数据。它缓冲数据以在将数据插入或更新到作为FULLTEXT 索引一部分的列时最小化磁盘 I/O。当索引缓存已满时,令牌数据将写入磁盘。每个InnoDB
FULLTEXT
索引都有它自己的独立索引缓存,其大小由配置选项innodb_ft_cache_size
控制。另请参阅 全文搜索、FULLTEXT 索引。
- 索引条件下推
索引条件下推 (ICP) 是一种优化,它将
WHERE
条件的一部分下推到存储引擎,如果条件的一部分可以使用索引中的字段进行评估。ICP 可以减少存储引擎访问基表的次数以及 MySQL 服务器访问存储引擎的次数。有关更多信息,请参见第 10.2.1.6 节,“索引条件下推优化”。- 索引提示
扩展的 SQL 语法,用于覆盖优化器推荐的索引。例如,
FORCE INDEX
、USE INDEX
和IGNORE INDEX
子句。通常在索引列具有不均匀分布的值时使用,导致基数估计不准确。- 索引前缀
在适用于多个列(称为组合索引)的索引中,索引的初始或前导列。引用组合索引的前 1、2、3 等列的查询可以使用索引,即使查询没有引用索引中的所有列。
- 索引统计
请参见统计。
- 最小记录
索引中的伪记录,表示该索引中最小值以下的间隙。如果一个事务有一个语句,例如
SELECT ... FROM ... WHERE col < 10 FOR UPDATE;
,并且该列中的最小值为 5,那么它就是对最小记录的锁,它阻止其他事务插入更小的值,例如 0、-10 等。- INFORMATION_SCHEMA
提供查询接口访问 MySQL数据字典的数据库的名称。(此名称由 ANSI SQL 标准定义。)要检查有关数据库的信息(元数据),您可以查询表,例如
INFORMATION_SCHEMA.TABLES
和INFORMATION_SCHEMA.COLUMNS
,而不是使用生成非结构化输出的SHOW
命令。INFORMATION_SCHEMA
数据库还包含特定于InnoDB的表,这些表提供查询接口访问InnoDB
数据字典。您使用这些表不是为了查看数据库的结构,而是为了获取有关InnoDB
表工作原理的实时信息,以帮助进行性能监控、调整和故障排除。- InnoDB
MySQL 组件,它将高性能与事务性功能相结合,以实现可靠性、健壮性和并发访问。它体现了ACID 设计理念。它表示为存储引擎;它处理使用
ENGINE=INNODB
子句创建或修改的表。有关体系结构详细信息和管理过程,请参见第 17 章,InnoDB 存储引擎;有关性能建议,请参见第 10.5 节,“针对 InnoDB 表进行优化”。在 MySQL 5.5 及更高版本中,
InnoDB
是新表的默认存储引擎,不需要ENGINE=INNODB
子句。InnoDB
表非常适合热备份。有关在不中断正常处理的情况下备份 MySQL 服务器的MySQL Enterprise Backup 产品的信息,请参见第 32.1 节,“MySQL Enterprise Backup 概述”。另请参阅 ACID、热备份、MySQL Enterprise Backup、存储引擎、事务。
- 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
和 第 17.6.3.2 节,“每个表一个文件的表空间”。- innodb_lock_wait_timeout
innodb_lock_wait_timeout
选项设置在等待 共享资源可用或放弃并处理错误、重试或在您的应用程序中执行其他处理之间的平衡。回滚任何等待超过指定时间来获取锁 的InnoDB
事务。如果死锁 是由对由不同存储引擎控制的多个表进行更新造成的,则此选项特别有用;此类死锁不会被自动检测。- innodb_strict_mode
innodb_strict_mode
选项控制InnoDB
是否以 严格模式 运行,在严格模式下,通常被视为警告的条件会改为导致错误(并使底层语句失败)。另请参见 严格模式。
- 创新系列
具有相同主版本的创新版本构成一个创新系列。例如,MySQL 8.1 到 8.3 构成 MySQL 8 创新系列。
另请参见 LTS 系列。
- 插入
SQL 中的主要 DML 操作之一。插入的性能是 数据仓库 系统的关键因素,这些系统将数百万行加载到表中,也是 OLTP 系统的关键因素,在这些系统中,许多并发连接可能以任意顺序将行插入到同一张表中。如果插入性能对您很重要,您应该了解 InnoDB 功能,例如 变更缓冲区 中使用的 插入缓冲区 和 自动递增 列。
- 插入缓冲区
变更缓冲区 的旧名称。在 MySQL 5.5 中,增加了对
DELETE
和UPDATE
操作的二级索引页变更缓冲的支持。以前,只有由INSERT
操作产生的变更会被缓冲。现在首选的术语是 变更缓冲区。- 插入缓冲
将
INSERT
操作产生的二级索引页变更存储在 变更缓冲区 中而不是立即写入的技巧,这样就可以执行物理写入以最大程度地减少随机 I/O。它是 变更缓冲 的类型之一;其他类型包括 删除缓冲 和 清除缓冲。如果二级索引是 唯一 的,则不会使用插入缓冲,因为在写入新条目之前无法验证新值的唯一性。其他类型的变更缓冲确实适用于唯一索引。
- 插入意向锁
由
INSERT
操作在行插入之前设置的 间隙锁 类型。这种类型的 锁 会发出插入意向信号,以便如果多个事务插入到同一个索引间隙中,则如果它们没有插入到间隙中的同一位置,则不必彼此等待。有关更多信息,请参见 第 17.7.1 节,“InnoDB 锁定”。- 实例
单个 mysqld 守护程序,管理表示一个或多个 数据库 的 数据目录,其中包含一组 表。在开发、测试和某些 复制 场景中,通常在同一台 服务器 机器上有多个实例,每个实例管理其自己的数据目录,并在其自己的端口或套接字上监听。如果一个实例运行 磁盘绑定 工作负载,则服务器可能仍然具有额外的 CPU 和内存容量来运行其他实例。
- 检测
在源代码级别进行的修改,用于收集用于调整和调试的性能数据。在 MySQL 中,通过使用
INFORMATION_SCHEMA
和PERFORMANCE_SCHEMA
数据库的 SQL 接口来公开检测收集的数据。另请参见 INFORMATION_SCHEMA、性能模式。
- 意向排他锁
参见 意向锁。
- 意向锁
一种应用于表的 锁,用于指示 事务 意图在表中的行上获取的锁类型。不同的事务可以在同一张表上获取不同类型的意向锁,但是第一个在表上获取 意向排他 (IX) 锁的事务会阻止其他事务在该表上获取任何 S 或 X 锁。相反,第一个在表上获取 意向共享 (IS) 锁的事务会阻止其他事务在该表上获取任何 X 锁。两阶段处理允许按照顺序解决锁请求,而不会阻止锁和相应的兼容操作。有关此锁定机制的更多信息,请参见 第 17.7.1 节,“InnoDB 锁定”。
- 意向共享锁
参见 意向锁。
- 拦截器
用于检测或调试应用程序某些方面的代码,可以在不重新编译或更改应用程序本身源代码的情况下启用。
另请参见 命令拦截器、Connector/J、Connector/NET、异常拦截器。
- 内在临时表
另请参见 优化器。
- 倒排索引
一种为文档检索系统优化的数据结构,用于实现
InnoDB
全文搜索。InnoDB
FULLTEXT 索引 实施为倒排索引,记录每个词在文档中的位置,而不是表行的位置。单个列值(存储为文本字符串的文档)由倒排索引中的许多条目表示。另请参见 全文搜索、FULLTEXT 索引、ilist。
- IOPS
每秒 I/O 操作次数 的缩写。繁忙系统的常见测量方法,尤其是 OLTP 应用程序。如果此值接近存储设备可以处理的最大值,则应用程序可能会变得 磁盘绑定,从而限制 可扩展性。
- 隔离级别
数据库处理的基础之一。隔离是缩写词 ACID 中的 I;隔离级别是微调性能与可靠性、一致性和可重复性结果之间平衡的设置,当多个 事务 同时进行更改和执行查询时。
从最高的一致性和保护级别到最低的保护级别,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、事务。
J
- J2EE
Java Platform, Enterprise Edition:Oracle 的企业 Java 平台。它包含用于企业级 Java 应用程序的 API 和运行时环境。有关完整详细信息,请参见 http://www.oracle.com/technetwork/java/javaee/overview/index.html。对于 MySQL 应用程序,您通常使用 Connector/J 进行数据库访问,并使用 Tomcat 或 JBoss 等应用程序服务器来处理中间层工作,以及可选的框架,例如 Spring。J2EE 堆栈中通常提供的与数据库相关的功能包括 连接池 和 故障转移 支持。
- Java
一种编程语言,它结合了高性能、丰富的内置功能和数据类型、面向对象机制、广泛的标准库以及各种可重用的第三方模块。许多框架、应用程序服务器和其他技术支持企业开发。其语法在很大程度上对 C 和 C++ 开发人员来说很熟悉。要使用 MySQL 编写 Java 应用程序,可以使用名为 Connector/J 的 JDBC 驱动程序。
另请参见 C、Connector/J、C++、JDBC。
- JBoss
另请参阅 J2EE。
- JDBC
““Java 数据库连接”” 的缩写,一种用于从 Java 应用程序访问数据库的 API。编写 MySQL 应用程序的 Java 开发人员使用 Connector/J 组件作为其 JDBC 驱动程序。
另请参见 API、Connector/J、J2EE、Java。
- JNDI
另请参见 Java。
- join
一种 查询,它通过引用表中包含相同值的列来检索来自多个表的數據。理想情况下,这些列是
InnoDB
外键 关系的一部分,这确保了 引用完整性 以及联接列是 索引 的。通常用于在 规范化 数据设计中,通过用数字 ID 替换重复的字符串来节省空间并提高查询性能。
K
- KDC
请参见 密钥分发中心。
- 密钥分发中心
- keystore
另请参见 SSL。
- KEY_BLOCK_SIZE
用于指定使用 压缩行格式 的
InnoDB
表中数据页大小的选项。默认值为 8 千字节。较低的值可能会遇到内部限制,这些限制取决于行大小和压缩百分比的组合。对于
MyISAM
表,KEY_BLOCK_SIZE
可选地指定用于索引键块的大小(以字节为单位)。该值被视为提示;如果需要,可以使用其他大小。为单个索引定义指定的KEY_BLOCK_SIZE
值会覆盖表级别的KEY_BLOCK_SIZE
值。另请参见 压缩行格式。
L
- latch
InnoDB
使用的一种轻量级结构,用于实现对其自身内部内存结构的 锁,通常保持的时间很短,以毫秒或微秒为单位。一个通用术语,包括 互斥锁(用于独占访问)和 读写锁(用于共享访问)。某些闩锁是InnoDB
性能调优的重点。有关闩锁使用和争用的统计信息可通过 性能模式 接口获得。- libmysql
另请参见 libmysqlclient。
- libmysqlclient
库文件,名为
libmysqlclient.a
或libmysqlclient.so
,通常链接到用 C 编写的 客户端 程序中。有时非正式地称为 libmysql 或 mysqlclient 库。另请参见 客户端、libmysql、mysqlclient。
- libmysqld
此 嵌入式 MySQL 服务器库可以将功能齐全的 MySQL 服务器运行在 客户端 应用程序中。主要优势是提高了速度,并为嵌入式应用程序提供了更简单的管理。您链接到
libmysqld
库而不是 libmysqlclient。API 在这三个库之间是相同的。另请参见 客户端、嵌入式、libmysql、libmysqlclient。
- 生命周期拦截器
Connector/J 支持的一种 拦截器。它涉及实现接口
com.mysql.jdbc.ConnectionLifecycleInterceptor
。另请参见 Connector/J、拦截器。
- 列表
InnoDB
缓冲池 表示为一个内存 页 列表。随着新页被访问并进入缓冲池,缓冲池中的页被再次访问并被视为更新,以及未被长时间访问的页被 逐出 缓冲池,该列表将被重新排序。缓冲池被划分为 子列表,并且替换策略是熟悉的 LRU 技术的一种变体。- 负载均衡
一种通过将查询请求发送到复制或集群配置中的不同从服务器来扩展只读连接的技术。使用 Connector/J,负载均衡通过
com.mysql.jdbc.ReplicationDriver
类启用,并由配置属性loadBalanceStrategy
控制。另请参阅 Connector/J,J2EE。
- localhost
另请参见 连接。
- 锁
作为 锁定 策略的一部分,控制对资源(如表、行或内部数据结构)的访问的对象的高级概念。对于密集型性能调优,您可能需要深入了解实现锁的实际结构,例如 互斥锁 和 闩锁。
- 锁升级
一些数据库系统中使用的一种操作,它将许多 行锁 转换为单个 表锁,从而节省内存空间,但会减少对表的并发访问。
InnoDB
对行锁使用空间效率高的表示形式,因此不需要 锁 升级。- 锁模式
共享 (S) 锁 允许 事务 读取一行。多个事务可以同时在同一行上获取 S 锁。
排他 (X) 锁允许事务更新或删除一行。任何其他事务都不能同时在同一行上获取任何类型的锁。
意向锁 应用于表,用于指示事务打算在表中的行上获取哪种类型的锁。不同的事务可以在同一表上获取不同类型的意向锁,但是第一个在表上获取意向排他 (IX) 锁的事务会阻止其他事务在表上获取任何 S 或 X 锁。相反,第一个在表上获取意向共享 (IS) 锁的事务会阻止其他事务在表上获取任何 X 锁。两阶段过程允许按顺序解决锁请求,而不会阻塞锁和相应的兼容操作。
- 锁定
保护 事务 不查看或更改被其他事务查询或更改的數據的系统。 锁定 策略必须在数据库操作的可靠性和一致性(ACID 哲学原则)以及良好的 并发 所需的性能之间取得平衡。微调锁定策略通常涉及选择 隔离级别 并确保所有数据库操作对于该隔离级别都是安全可靠的。
- 锁定读取
一个
SELECT
语句,它还对InnoDB
表执行 锁定 操作。无论是SELECT ... FOR UPDATE
还是SELECT ... LOCK IN SHARE MODE
。它有可能产生 死锁,具体取决于事务的 隔离级别。与 非锁定读取 相反。在 只读事务 中不允许全局表。在 MySQL 8.0.1 中,
SELECT ... FOR SHARE
替换了SELECT ... LOCK IN SHARE MODE
,但LOCK IN SHARE MODE
仍然可用以实现向后兼容性。请参见 第 17.7.2.4 节,“锁定读取”。
- 日志
在
InnoDB
上下文中,“日志” 或 “日志文件” 通常指的是由 ib_logfileN
文件表示的 重做日志。另一种类型的InnoDB
日志是 回滚日志,它是一个存储区域,其中包含活动事务修改数据的副本。MySQL 中的其他重要日志类型包括 错误日志(用于诊断启动和运行时问题)、二进制日志(用于处理复制和执行时间点恢复)、通用查询日志(用于诊断应用程序问题)和 慢查询日志(用于诊断性能问题)。
- 日志缓冲区
用于保存要写入构成 重做日志 的 日志文件 的数据的内存区域。它由
innodb_log_buffer_size
配置选项控制。- 日志文件
构成 重做日志 的 ib_logfile
N
文件之一。数据从 日志缓冲区 内存区域写入这些文件。另请参阅 ib_logfile、日志缓冲区、重做日志。
- 日志组
构成 重做日志 的文件集,通常命名为
ib_logfile0
和ib_logfile1
。(因此,有时统称为 ib_logfile。)另请参阅 ib_logfile、重做日志。
- 逻辑的
一种涉及高级、抽象方面的操作类型,例如表、查询、索引和其他 SQL 概念。通常,逻辑方面对于使数据库管理和应用程序开发变得方便易用至关重要。与 物理的 相反。
- 逻辑备份
复制表结构和数据而不复制实际数据文件的 备份。例如,
mysqldump
命令会生成逻辑备份,因为其输出包含诸如CREATE TABLE
和INSERT
之类的语句,这些语句可以重新创建数据。与 物理备份 相反。逻辑备份提供了灵活性(例如,您可以在恢复之前编辑表定义或插入语句),但与物理备份相比,恢复 时间可能长得多。- loose_
在服务器 启动 后添加到
InnoDB
配置选项的前缀,因此当前 MySQL 版本级别无法识别的任何新配置选项都不会导致启动失败。MySQL 处理以该前缀开头的配置选项,但如果前缀后面的部分不是已识别选项,则会发出警告而不是失败。另请参阅 启动。
- 低水位
表示下限的值,通常是一个阈值,在该阈值下,某些纠正措施开始或变得更加积极。与 高水位 相反。
另请参阅 高水位。
- LRU
是 “最近最少使用” 的首字母缩写词,是一种常见的存储区域管理方法。当需要空间来缓存较新的项目时,最近未使用过的项目会被 驱逐。
InnoDB
默认使用 LRU 机制来管理 缓冲池 中的 页面,但在页面可能只读取一次(例如,在 全表扫描 期间)的情况下会做出例外。LRU 算法的这种变体称为 中点插入策略。有关更多信息,请参见 第 17.5.1 节,“缓冲池”。- LSN
是 “日志序列号” 的首字母缩写词。这个任意的、不断增加的值代表 重做日志 中记录的操作所对应的某个时间点。(这个时间点与 事务 边界无关;它可能落在一个或多个事务的中间。)它在
InnoDB
内部使用,用于 崩溃恢复 和管理 缓冲池。在 MySQL 5.6.3 之前,LSN 是一个 4 字节无符号整数。在 MySQL 5.6.3 中,当重做日志文件大小限制从 4GB 增加到 512GB 时,LSN 变成了一个 8 字节无符号整数,因为需要额外的字节来存储额外的尺寸信息。基于 MySQL 5.6.3 或更高版本的应用程序在使用 LSN 值时,应使用 64 位而不是 32 位变量来存储和比较 LSN 值。
在 MySQL 企业备份 产品中,您可以指定一个 LSN 来代表要从中进行 增量备份 的时间点。相关的 LSN 由 mysqlbackup 命令的输出显示。获得与完整备份时间对应的 LSN 后,您可以指定该值来进行后续的增量备份,其输出包含用于下一个增量备份的另一个 LSN。
- LTS 版本系列
具有相同主版本号的 LTS 版本构成一个 LTS 版本系列。例如,所有 MySQL 8.4.x 版本构成 MySQL 8.4 LTS 版本系列。
注意:MySQL 8.0 是在 LTS 版本模型之前的一个 Bugfix 版本系列。
另请参阅 创新版本系列。
M
- .MRG 文件
包含对其他表的引用,由
MERGE
存储引擎使用。扩展名为该扩展名的文件始终包含在 MySQL 企业备份 产品的 mysqlbackup 命令生成的备份中。另请参阅 MySQL 企业备份、mysqlbackup 命令。
- .MYD 文件
MySQL 用于存储
MyISAM
表数据的文件。另请参阅 .MYI 文件、MySQL 企业备份、mysqlbackup 命令。
- .MYI 文件
MySQL 用于存储
MyISAM
表索引的文件。另请参阅 .MYD 文件、MySQL 企业备份、mysqlbackup 命令。
- 主服务器
参见 源服务器。
- 主线程
一个
InnoDB
线程,它在后台执行各种任务。大多数这些任务与 I/O 相关,例如将 更改缓冲区 中的更改写入相应的辅助索引。为了提高 并发性,有时会将操作从主线程移动到单独的后台线程。例如,在 MySQL 5.6 及更高版本中,脏页 由 页面清理器 线程而不是主线程从 缓冲池 中 刷新。
- MDL
另请参阅 元数据锁。
- 中等信任
是 部分信任 的同义词。由于信任设置范围很广,因此 “部分信任” 是首选,以避免暗示只有三个级别(低、中和高)。
另请参阅 Connector/NET、部分信任。
- memcached
许多 MySQL 和 NoSQL 软件栈中流行的组件,允许对单个值进行快速读写,并将结果完全缓存到内存中。传统上,应用程序需要额外的逻辑来将相同数据写入 MySQL 数据库以进行永久存储,或者在数据尚未缓存在内存中时从 MySQL 数据库读取数据。现在,应用程序可以使用简单的 memcached 协议,该协议由许多语言的客户端库支持,直接与使用
NDB
表的 MySQL 服务器通信。这些针对 MySQL 表的 NoSQL 接口允许应用程序比直接发出 SQL 语句实现更高的读写性能,并且可以简化已将 memcached 用于内存中缓存的系统的应用程序逻辑和部署配置。另请参阅 NoSQL。
- 合并
将更改应用于缓存到内存中的数据,例如在将页面调入 缓冲池 时,以及将记录在 变更缓冲区 中的任何适用更改合并到缓冲池中的页面中。更新后的数据最终由 刷新 机制写入 表空间。
- 元数据锁
一种类型的 锁,它可以阻止对正在被另一个 事务 同步使用的表的 DDL 操作。有关详细信息,请参阅 第 10.11.4 节“元数据锁定”。
对 在线 操作的增强,特别是在 MySQL 5.6 及更高版本中,集中于减少元数据锁定的数量。目标是让不改变表结构的 DDL 操作(例如,
CREATE INDEX
和DROP INDEX
针对InnoDB
表)在其他事务查询、更新等操作时继续执行。- 指标计数器
由 MySQL 5.6 及更高版本中 INFORMATION_SCHEMA 中的
INNODB_METRICS
表实现的功能。您可以查询低级InnoDB
操作的 计数 和总数,并将结果与 性能模式 中的数据结合使用,以进行性能调整。另请参阅 计数器、INFORMATION_SCHEMA、性能模式。
- 中间点插入策略
最初将 页面 调入
InnoDB
缓冲池 的技术,不是在列表的 “最新” 结尾,而是在中间的某个地方。此点的确切位置可能会有所不同,具体取决于innodb_old_blocks_pct
选项的设置。目的是让只读一次的页面(例如,在 全表扫描 期间)比使用严格的 LRU 算法更快地从缓冲池中老化。有关更多信息,请参阅 第 17.5.1 节“缓冲池”。- 迷你事务
InnoDB
处理的内部阶段,在 DML 操作期间对内部数据结构进行 物理 级别的更改时执行。迷你事务 (mtr) 没有 回滚 的概念;单个 事务 内可以发生多个迷你事务。迷你事务将信息写入 重做日志,这些信息在 崩溃恢复 期间使用。迷你事务也可以在常规事务的上下文中之外发生,例如在后台线程执行 清除 处理期间。- 混合模式插入
一条
INSERT
语句,其中为某些但并非所有新行指定了 自动递增 值。例如,多值INSERT
可以为某些情况下的自动递增列指定一个值,而为其他情况下的自动递增列指定NULL
。对于将列值指定为NULL
的行,InnoDB
会为这些行生成自动递增值。另一个例子是INSERT ... ON DUPLICATE KEY UPDATE
语句,其中可能生成但未使用的自动递增值,用于作为UPDATE
语句而不是INSERT
语句处理的任何重复行。可能会导致 复制 配置中 源 服务器和 副本 服务器之间出现一致性问题。可能需要调整 innodb_autoinc_lock_mode 配置选项的值。
另请参阅 自动递增、innodb_autoinc_lock_mode、副本、复制、源。
- MM.MySQL
用于 MySQL 的旧版 JDBC 驱动程序,在与 MySQL 产品集成后演变为 Connector/J。
另请参阅 Connector/J。
- Mono
由 Novell 开发的开源框架,适用于 Linux 平台上的 Connector/NET 和 C# 应用程序。
另请参阅 Connector/NET、C#。
- mtr
请参阅 迷你事务。
- 多核
- 多版本并发控制
请参阅 MVCC。
- 互斥锁
“互斥变量” 的非正式缩写。(互斥锁本身是 “互斥” 的缩写。)
InnoDB
用于表示和强制执行对内部内存中数据结构的独占访问 锁 的低级对象。一旦获取了锁,任何其他进程、线程等都将被阻止获取相同的锁。与InnoDB
用于表示和强制执行对内部内存中数据结构的共享访问 锁 的 读写锁 相比。互斥锁和读写锁统称为 闩锁。- MVCC
“多版本并发控制” 的缩写。这种技术允许具有某些 隔离级别 的
InnoDB
事务 执行 一致性读取 操作;也就是说,查询正在被其他事务更新的行,并查看这些更新发生之前的值。这是一种提高 并发性 的强大技术,它允许查询在不因其他事务持有的 锁 而等待的情况下继续执行。这种技术在数据库领域并非普遍存在。某些其他数据库产品以及某些其他 MySQL 存储引擎不支持它。
- my.cnf
- my.ini
- MyODBC 驱动程序
另请参阅 Connector/ODBC。
- mysql
mysql 程序是 MySQL 数据库的命令行解释器。它处理 SQL 语句,以及 MySQL 特定的命令(例如
SHOW TABLES
),方法是将请求传递给 mysqld 守护进程。- MySQL 企业版备份
一种许可产品,可执行 MySQL 数据库的 热备份。在备份
InnoDB
表时,它提供了最高的效率和灵活性,但也可以备份MyISAM
和其他类型的表。- mysqlbackup 命令
MySQL 企业版备份 产品的命令行工具。它对
InnoDB
表执行 热备份 操作,对MyISAM
和其他类型的表执行 温备份。有关此命令的更多信息,请参见 第 32.1 节,“MySQL 企业版备份概述”。另请参见 热备份、MySQL 企业版备份、温备份。
- mysqlclient
文件 libmysqlclient(扩展名为
.a
或.so
)实现的库的非正式名称。另请参见 libmysqlclient。
- mysqld
mysqld,也称为 MySQL 服务器,是一个单一的、多线程的程序,它在 MySQL 安装中执行大部分工作。它不会生成额外的进程。MySQL 服务器管理对包含数据库、表和其他信息的 MySQL 数据目录的访问,例如日志文件和状态文件。
mysqld 作为 Unix 守护程序或 Windows 服务运行,不断等待请求并在后台执行维护工作。
- MySQLdb
开源 Python 模块的名称,该模块构成 MySQL Python API 的基础。
另请参见 Python、Python API。
- mysqldump
执行数据库、表和表数据的某种组合的 逻辑备份 的命令。结果是 SQL 语句,可以复制原始架构对象、数据或两者。对于大量数据,物理备份 解决方案(如 MySQL 企业版备份)更快,特别是对于 恢复 操作。
另请参见 逻辑备份、MySQL 企业版备份、物理备份、恢复。
N
- .NET
- 原生 C API
另请参见 libmysql。
- 自然键
一个索引列,通常是 主键,其值具有现实意义。通常不建议使用,因为
如果值需要更改,则可能需要对 聚集索引 进行大量的索引维护,并更新每个 辅助索引 中重复的主键值的副本。
即使看似稳定的值也会以难以在数据库中正确表示的不可预测的方式发生变化。例如,一个国家可以变成两个或多个国家,使原始国家代码过时。或者,有关唯一值的规则可能存在例外。例如,即使纳税人 ID 旨在对单个人是唯一的,但数据库可能需要处理违反该规则的记录,例如在身份盗窃的情况下。纳税人 ID 和其他敏感 ID 号码也是糟糕的主键,因为它们可能需要被保护、加密和其他方式处理,不同于其他列。
因此,通常最好使用任意数字值来形成 合成键,例如使用 自动递增 列。
- 相邻页
与特定页位于同一个 扩展 中的任何 页。当选择一个页进行 刷新 时,任何 脏 的相邻页通常也会被刷新,作为对传统硬盘的 I/O 优化。在 MySQL 5.6 及更高版本中,此行为可以通过配置变量
innodb_flush_neighbors
控制;对于 SSD 驱动器,您可能需要关闭此设置,因为 SSD 驱动器在随机位置写入较小的数据批次时没有相同的开销。- 下一个键锁定
对索引记录进行 记录锁定 和对索引记录之前的间隙进行 间隙锁定 的组合。
- 非锁定读取
不使用
SELECT ... FOR UPDATE
或SELECT ... LOCK IN SHARE MODE
子句的 查询。在 只读事务 中,全局表允许的唯一类型的查询。与 锁定读取 相反。请参见 第 17.7.2.3 节,“一致的非锁定读取”。在 MySQL 8.0.1 中,
SELECT ... FOR SHARE
替换了SELECT ... LOCK IN SHARE MODE
,但LOCK IN SHARE MODE
仍然可用以实现向后兼容性。- 不可重复读取
当查询检索数据时,同一 事务 中的后续查询检索应该是相同数据时,但查询返回不同的结果(由于另一个事务在此期间提交而发生更改)。
这种操作违反了数据库设计中的 ACID 原则。在事务中,数据应保持一致,并具有可预测且稳定的关系。
在不同的 隔离级别 中,不可重复读取被 可串行读取 和 可重复读取 级别阻止,被 一致读取 和 读取未提交 级别允许。
另请参见 ACID、一致读取、隔离级别、READ UNCOMMITTED、REPEATABLE READ、SERIALIZABLE、事务。
- 非阻塞 I/O
另请参见 异步 I/O。
- 规范化
数据库设计策略,其中数据被拆分为多个表,并使用 ID 将重复值压缩成单行,以避免存储、查询和更新冗余或冗长的值。它通常用于 OLTP 应用程序。
例如,地址可以被赋予一个唯一的 ID,这样人口普查数据库可以通过将该 ID 与每个家庭成员相关联来表示 居住在这个地址 的关系,而不是存储多个复杂的副本,例如 123 Main Street, Anytown, USA。
另一个例子,虽然简单的地址簿应用程序可能会将每个电话号码存储在与人员姓名和地址相同的表中,但电话公司数据库可能会为每个电话号码分配一个特殊的 ID,并将号码和 ID 存储在单独的表中。这种规范化的表示可以简化当区号拆分时的大规模更新。
规范化并不总是推荐的。主要查询且仅通过完全删除和重新加载进行更新的数据通常保存在更少的、更大的表中,这些表包含重复值的冗余副本。这种数据表示称为 反规范化,并且经常在数据仓库应用程序中找到。
- NoSQL
一组数据访问技术的泛称,它们不使用 SQL 语言作为读取和写入数据的首要机制。一些 NoSQL 技术充当键值存储,只接受单值读取和写入;一些放松了 ACID 方法的限制;还有一些不需要预先计划的 模式。MySQL 用户可以通过使用 memcached API 直接访问某些类型的 MySQL 表,将 NoSQL 样式的处理与 SQL 操作相结合,以实现速度和简便性与灵活性和方便性。
- NOT NULL 约束
一种 约束,它指定 列 不能包含任何 NULL 值。它有助于维护 引用完整性,因为数据库服务器可以识别具有错误缺失值的数据。它还有助于查询优化中涉及的算术运算,使优化器能够预测该列上索引中的条目数量。
- NULL
SQL 中的一个特殊值,表示数据不存在。任何涉及
NULL
值的算术运算或相等性测试都会产生一个NULL
结果。(因此它类似于 IEEE 浮点概念中的 NaN,““非数字”。)任何聚合计算(如AVG()
)在确定除以多少行时,都会忽略具有NULL
值的行。唯一适用于NULL
值的测试使用 SQL 习语IS NULL
或IS NOT NULL
。NULL
值在 索引 操作中发挥作用,因为为了提高性能,数据库必须尽量减少跟踪缺失数据值的开销。通常,NULL
值不会存储在索引中,因为使用标准比较运算符测试索引列的查询永远不会匹配该列具有NULL
值的行。出于同样的原因,唯一索引不会阻止NULL
值;这些值 simply 不会在索引中表示。在列上声明NOT NULL
约束可以保证索引中没有遗漏行,从而实现更好的查询优化(准确计算行数并估计是否使用索引)。因为 主键 必须能够唯一标识表中的每一行,所以单列主键不能包含任何
NULL
值,多列主键不能包含任何在所有列中都包含NULL
值的行。虽然 Oracle 数据库允许将
NULL
值与字符串连接,但InnoDB
将此类操作的结果视为NULL
。
O
- .OPT 文件
包含数据库配置信息的的文件。此扩展名的文件包含在由 mysqlbackup 命令(MySQL Enterprise Backup 产品的一部分)生成的备份中。
另请参阅 MySQL 企业备份、mysqlbackup 命令。
- ODBC
Open Database Connectivity 的缩写,一个行业标准 API。通常与基于 Windows 的服务器或需要 ODBC 与 MySQL 通信的应用程序一起使用。MySQL ODBC 驱动程序称为 Connector/ODBC。
另请参阅 Connector/ODBC。
- 离页列
包含可变长度数据(如
BLOB
和VARCHAR
)的列,这些数据太长而无法放在 B 树 页上。数据存储在 溢出页 中。对于此类存储,DYNAMIC 行格式比旧的 COMPACT 行格式更高效。- OLTP
“联机事务处理”的缩写。一个数据库系统或一个数据库应用程序,它运行一个工作负载,其中包含许多 事务,并且频繁进行写入和读取,通常一次仅影响少量数据。例如,航空公司预订系统或处理银行存款的应用程序。数据可能以 规范化 形式组织,以平衡 DML(插入/更新/删除)效率和 查询 效率。与 数据仓库 相比。
凭借其 行级锁定 和 事务性 功能,InnoDB 是用于 OLTP 应用程序中使用的 MySQL 表的理想存储引擎。
- 联机
一种不涉及数据库停机、阻塞或限制操作的操作类型。通常应用于 DDL。缩短限制操作时长的操作(如 快速索引创建)已在 MySQL 5.6 中演变为更广泛的 联机 DDL 操作集。
在备份的上下文中,热备份 是一种联机操作,而 温备份 是一种部分联机操作。
- 联机 DDL
在 DDL(主要是
ALTER TABLE
)操作期间提高InnoDB
表的性能、并发性和可用性的功能。有关详细信息,请参阅 第 17.12 节,“InnoDB 和联机 DDL”。具体细节根据操作类型而有所不同。在某些情况下,可以在
ALTER TABLE
进行时并发修改表。操作可能无需表副本即可执行,或者可以使用专门优化的表副本类型来执行。用于就地操作的 DML 日志空间使用情况受innodb_online_alter_log_max_size
配置选项控制。此功能是 MySQL 5.5 中 快速索引创建 功能的增强。
- 乐观
指导关系数据库系统低级实现决策的方法。关系数据库中的性能和 并发 要求意味着操作必须快速启动或调度。一致性和 参照完整性 的要求意味着任何操作都可能失败:事务可能回滚,DML 操作可能违反约束,锁定请求可能导致死锁,网络错误可能导致超时。乐观策略是指假设大多数请求或尝试成功,因此在准备失败情况时所做的工作相对较少。当此假设为真时,数据库不会执行不必要的工作;当请求失败时,必须执行额外的工作以清理和撤消更改。
InnoDB
对 锁定 和 提交 等操作使用乐观策略。例如,事务更改的数据可以在提交发生之前写入数据文件,从而使提交本身非常快,但如果事务回滚,则需要更多工作来撤消更改。乐观策略的相反是 悲观 策略,其中系统针对不可靠且经常不成功的操作进行了优化。这种方法在数据库系统中很少见,因为在选择可靠的硬件、网络和算法方面付出了很多努力。
- 优化器
- 选项
MySQL 的配置参数,存储在 选项文件 中或通过命令行传递。
对于适用于 InnoDB 表的 选项,每个选项名称都以
innodb_
前缀开头。- 选项文件
保存 MySQL 实例配置 选项 的文件。传统上,在 Linux 和 Unix 上,此文件名为
my.cnf
,在 Windows 上,此文件名为my.ini
。- 溢出页
分别分配的磁盘 页,用于保存可变长度列(如
BLOB
和VARCHAR
),这些列太长而无法放在 B 树 页上。关联的列被称为 离页列。
P
- .par 文件
包含分区定义的文件。此扩展名的文件包含在由
mysqlbackup
命令(MySQL Enterprise Backup 产品的一部分)生成的备份中。在 MySQL 5.7.6 中为
InnoDB
表引入原生分区支持后,不再为分区InnoDB
表创建.par
文件。分区MyISAM
表在 MySQL 5.7 中继续使用.par
文件。在 MySQL 8.0 中,仅由InnoDB
存储引擎提供分区支持。因此,从 MySQL 8.0 开始,不再使用.par
文件。另请参阅 MySQL 企业备份、mysqlbackup 命令。
- 页
代表
InnoDB
在任何时间从磁盘(数据文件)到内存(缓冲池)之间传输的数据量。一个页可以包含一个或多个 行,具体取决于每行包含的数据量。如果一行不能完全容纳在一个页中,InnoDB
会设置额外的指针式数据结构,以便可以将有关该行的信息存储在一个页中。将更多数据放入每个页的一种方法是使用 压缩行格式。对于使用 BLOB 或大型文本字段的表,紧凑型行格式 允许将这些大型列与行的其余部分分开存储,从而减少了不引用这些列的查询的 I/O 开销和内存使用量。
当
InnoDB
以批处理方式读取或写入一组页以提高 I/O 吞吐量时,它一次读取或写入一个 扩展。MySQL 实例中所有
InnoDB
磁盘数据结构共享相同的 页大小。- 页面清理器
一个
InnoDB
后台 线程,它从 缓冲池 中 刷新 脏页。在 MySQL 5.6 之前,此活动由 主线程 执行。页面清理器线程的数量由innodb_page_cleaners
配置选项控制,该选项在 MySQL 5.7.4 中引入。- 页面大小
对于包括 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 应用程序),较小的页面大小可以提高性能。当更新单个行时,复制到内存、写入磁盘、重新组织、锁定等操作所复制的数据更少。
- 父表
在 外键 关系中,该表保存从 子表 指向的初始列值。删除或更新父表中的行的结果取决于外键定义中的
ON UPDATE
和ON DELETE
子句。子表中具有对应值的行可能会被自动删除或更新,或者这些列可能会被设置为NULL
,或者可能会阻止该操作。- 部分备份
- 部分索引
- 部分信任
一个执行环境,通常由托管提供商使用,其中应用程序具有一些权限,但没有其他权限。例如,应用程序可能能够通过网络访问数据库服务器,但在读取和写入本地文件方面受到 “沙箱” 限制。
另请参阅 Connector/NET。
- 性能模式
在 MySQL 5.5 及更高版本中,
performance_schema
模式提供了一组表,您可以查询这些表以获取有关 MySQL 服务器内部许多部分的性能特征的详细信息。请参阅 第 29 章,MySQL 性能模式。另请参阅 INFORMATION_SCHEMA、闩锁、互斥锁、读写锁。
- Perl
一种编程语言,其根源在于 Unix 脚本和报表生成。包含高性能正则表达式和文件 I/O。通过 CPAN 等存储库提供大量可重用模块。
另请参阅 Perl API。
- Perl API
一个针对用 Perl 语言编写的 MySQL 应用程序的开源 API。通过
DBI
和DBD::mysql
模块实现。有关详细信息,请参阅 第 31.9 节,“MySQL Perl API”。- 持久统计信息
一项功能,它将
InnoDB
表 的 索引 统计信息存储在磁盘上,为 查询 提供更好的 计划稳定性。有关更多信息,请参阅 第 17.8.10.1 节,“配置持久优化器统计信息参数”。- 悲观
一种牺牲性能或并发性以换取安全性的方法。如果很大一部分请求或尝试可能会失败,或者请求失败的后果很严重,那么它就适合使用。
InnoDB
使用一种称为悲观 锁定 策略,以最大程度地减少 死锁 的可能性。在应用程序级别,您可以通过在最开始获取事务所需的所有锁来避免死锁,从而使用悲观策略。许多内置数据库机制使用相反的 乐观 方法。
- 幻影
一行,它出现在查询的结果集中,但没有出现在之前的查询的结果集中。例如,如果在 事务 中两次运行查询,并且在此期间,另一个事务在插入新行或更新行后提交,使其与查询的
WHERE
子句匹配。这种现象被称为幻读。它比 不可重复读 更难防止,因为锁定第一个查询结果集中的所有行并不能阻止导致幻影出现的更改。
在不同的 隔离级别 中,可串行读 级别可以防止幻读,而 可重复读、一致性读 和 读未提交 级别则允许幻读。
另请参阅 一致性读、隔离级别、不可重复读、READ UNCOMMITTED、REPEATABLE READ、SERIALIZABLE、事务。
- PHP
一种源自 Web 应用程序的编程语言。代码通常作为块嵌入到网页的源代码中,其输出在网页由 Web 服务器传输时被替换到网页中。这与 CGI 脚本等应用程序形成对比,后者以整个网页的形式打印输出。PHP 风格的编码用于高度交互式和动态的网页。现代 PHP 程序也可以作为命令行或 GUI 应用程序运行。
MySQL 应用程序使用其中一个 PHP API 编写。可重用模块可以用 C 编写,并从 PHP 调用。
另一种使用 MySQL 编写服务器端网页的技术是 ASP.net。
- PHP API
有几种 API 可用于在 PHP 语言中编写 MySQL 应用程序:原始 MySQL API (
Mysql
) MySQL 改进扩展 (Mysqli
) MySQL 本机驱动程序 (Mysqlnd
) MySQL 函数 (PDO_MYSQL
) 和 Connector/PHP。有关详细信息,请参阅 MySQL 和 PHP。- 物理
一种涉及硬件相关方面(例如磁盘块、内存页面、文件、位、磁盘读取等)的操作类型。通常,在专家级性能调整和问题诊断期间,物理方面非常重要。与 逻辑 相反。
- 物理备份
一个 备份,它复制实际的数据文件。例如,
mysqlbackup
命令(MySQL 企业版备份 产品的一部分)会生成物理备份,因为它的输出包含可以被mysqld
服务器直接使用的数据文件,从而导致更快的 还原 操作。与 逻辑备份 相反。参见 备份、逻辑备份、MySQL 企业备份、恢复。
- PITR
参见 点时间恢复。
- 计划稳定性
- 点时间恢复
将 备份 恢复到某个特定日期和时间的数据库状态的过程。通常缩写为 “PITR”。由于指定的时间不太可能与备份的时间完全一致,因此此技术通常需要结合使用 物理备份 和 逻辑备份。例如,使用 MySQL 企业备份 产品,您可以恢复在指定时间点之前执行的最后一次备份,然后重放 二进制日志 中从备份时间到 PITR 时间之间的更改。
参见 备份、二进制日志、逻辑备份、MySQL 企业备份、物理备份。
- 端口
数据库服务器监听的 TCP/IP 套接字的编号,用于建立 连接。通常与 主机 结合指定。根据您对网络加密的使用情况,可能存在一个用于未加密流量的端口和另一个用于 SSL 连接的端口。
- 前缀
参见 索引前缀。
- 准备好的备份
一组备份文件,由 MySQL 企业备份 产品在应用 二进制日志 和 增量备份 的所有阶段完成后生成。生成的这些文件已准备好进行 恢复。在应用步骤之前,这些文件被称为 原始备份。
- 预处理语句
一条 SQL 语句,它预先进行分析以确定有效的执行计划。它可以执行多次,而无需每次都进行解析和分析的开销。通过使用占位符,可以为每次的
WHERE
子句中的字面量替换不同的值。这种替换技术可以提高安全性,防止某些类型的 SQL 注入攻击。您还可以减少将返回值转换为程序变量并复制返回值的开销。虽然您可以通过 SQL 语法直接使用预处理语句,但各种 连接器 都有用于操作预处理语句的编程接口,并且这些 API 比通过 SQL 更有效。
- 主键
一组列(隐含地,基于这组列的索引),可以唯一地标识表中的每一行。因此,它必须是唯一的索引,且不包含任何
NULL
值。InnoDB
要求每个表都有这样的索引(也称为 聚集索引 或 聚簇索引),并根据主键的列值组织表存储。在选择主键值时,请考虑使用任意值(合成键),而不是依赖于从其他来源派生的值(自然键)。
- 主体
- 进程
正在执行的程序的实例。操作系统在多个正在运行的进程之间切换,从而实现一定程度的 并发。在大多数操作系统上,进程可以包含多个共享资源的执行 线程。线程之间的上下文切换比进程之间的等效切换更快。
- 伪记录
- Pthreads
POSIX 线程标准,它定义了 Unix 和 Linux 系统上的线程和锁定操作的 API。在 Unix 和 Linux 系统上,
InnoDB
使用此实现来处理 互斥量。参见 互斥量。
- 清理
由一个或多个独立的后台线程(由
innodb_purge_threads
控制)执行的一种垃圾回收类型,该线程按定期时间表运行。清理会从 历史列表 中解析和处理 回滚日志 页面,以删除以前标记为删除的聚集索引和辅助索引记录(由以前的DELETE
语句标记)并且不再需要用于 MVCC 或 回滚。清理在处理完回滚日志页面后,会将它们从历史列表中释放。- 清理缓冲
将
DELETE
操作导致的辅助索引页面的更改存储在 更改缓冲区 中而不是立即写入更改的技术,以便可以执行物理写入以最大程度地减少随机 I/O。(因为删除操作是一个两步过程,因此此操作会缓冲通常用于清除以前标记为删除的索引记录的写入。)它是 更改缓冲 类型之一;其他类型是 插入缓冲 和 删除缓冲。- 清理滞后
InnoDB
历史列表 的另一个名称。与innodb_max_purge_lag
配置选项相关。- 清理线程
InnoDB
进程中的一个 线程,专门用于执行定期 清理 操作。在 MySQL 5.6 及更高版本中,多个清理线程由innodb_purge_threads
配置选项启用。- Python
一种在广泛领域使用的编程语言,从 Unix 脚本到大型应用程序。包括运行时类型、内置的高级数据类型、面向对象的特性以及广泛的标准库。通常用作其他语言编写的组件之间的 “粘合” 语言。MySQL Python API 是开源的 MySQLdb 模块。
参见 MySQLdb、Python API。
- Python API
Q
- 查询
在 SQL 中,从一个或多个 表 中读取信息的运算。根据数据的组织方式和查询的参数,查找可能通过查询 索引 来优化。如果涉及多个表,则该查询称为 连接。
出于历史原因,有时有关语句内部处理的讨论会以更广泛的意义使用 “查询”,包括其他类型的 MySQL 语句,例如 DDL 和 DML 语句。
- 查询执行计划
优化器关于如何最有效地执行 查询 的决策集合,包括要使用哪些 索引 以及连接表的顺序。 计划稳定性 涉及对给定查询始终做出相同的选择。
- 查询日志
请参阅 通用查询日志。
- 使处于静止状态
为了减少数据库活动量,通常在准备执行操作之前,例如
ALTER TABLE
、备份 或 关闭。可能会或可能不会尽可能多地进行 刷新,以便 InnoDB 不再执行后台 I/O。在 MySQL 5.6 及更高版本中,语法
FLUSH TABLES ... FOR EXPORT
会将一些数据写入磁盘,用于InnoDB
表,这使得通过复制数据文件来备份这些表变得更加简单。
R
- R 树
用于对多维数据(例如地理坐标、矩形或多边形)进行空间索引的树形数据结构。
另请参见 B 树。
- RAID
是 “廉价磁盘冗余阵列” 的缩写。将 I/O 操作分散到多个驱动器上,可以在硬件级别实现更高的 并发性,并提高低级写入操作的效率,否则这些操作将按顺序执行。
另请参见 并发性。
- 随机潜水
一种快速估计列中不同值数量(该列的 基数)的技术。
InnoDB
从索引中随机抽取页面,并使用这些数据来估计不同值的数量。另请参见 基数。
- 原始备份
由 MySQL 企业版备份 产品生成的初始备份文件集,在反映 二进制日志 中的变化以及任何 增量备份 应用之前。在此阶段,文件尚未准备好 还原。在应用这些更改后,这些文件称为 预备备份。
另请参见 二进制日志、热备份、ibbackup_logfile、增量备份、MySQL 企业版备份、预备备份、还原。
- READ COMMITTED
一种 隔离级别,它使用一种 锁定 策略,放宽了 事务 之间的某些保护,以提高性能。事务无法看到其他事务的未提交数据,但它们可以看到在当前事务开始后由另一个事务提交的数据。因此,事务永远不会看到任何错误数据,但它看到的数据在一定程度上可能取决于其他事务的时序。
当具有此隔离级别的事务执行
UPDATE ... WHERE
或DELETE ... WHERE
操作时,其他事务可能必须等待。该事务可以执行SELECT ... FOR UPDATE
和LOCK IN SHARE MODE
操作,而不会让其他事务等待。在 MySQL 8.0.1 中,
SELECT ... FOR SHARE
替换了SELECT ... LOCK IN SHARE MODE
,但LOCK IN SHARE MODE
仍然可用以实现向后兼容性。另请参见 ACID、隔离级别、锁定、REPEATABLE READ、SERIALIZABLE、事务。
- 读取现象
- READ UNCOMMITTED
提供事务之间最少保护的 隔离级别。查询使用一种 锁定 策略,允许它们在通常情况下需要等待另一个事务的情况下继续执行。但是,这种额外的性能是以结果可靠性降低为代价的,包括已被其他事务更改但尚未提交的数据(称为 脏读)。请谨慎使用此隔离级别,并注意结果可能不一致或不可重复,具体取决于其他事务在同一时间执行的操作。通常,具有此隔离级别的事务仅执行查询,而不是插入、更新或删除操作。
- 读取视图
InnoDB
的 MVCC 机制使用的内部快照。某些 事务,具体取决于它们的 隔离级别,会看到数据值,就像它们在事务(或在某些情况下是语句)开始时一样。使用读取视图的隔离级别是 REPEATABLE READ、READ COMMITTED 和 READ UNCOMMITTED。另请参见 隔离级别、MVCC、READ COMMITTED、READ UNCOMMITTED、REPEATABLE READ、事务。
- 预读
一种 I/O 请求,它异步地将一组 页面(整个 扩展)预取到 缓冲池 中,以防这些页面很快就会被需要。线性预读技术根据前一个扩展中页面的访问模式来预取一个扩展的所有页面。随机预读技术在缓冲池中存在来自同一扩展的特定数量的页面后,会预取扩展的所有页面。随机预读不是 MySQL 5.5 的一部分,但在 MySQL 5.6 中重新引入,受
innodb_random_read_ahead
配置选项的控制。- 只读事务
一种类型的 事务,可以通过消除为每个事务创建 读取视图 所涉及的一些簿记工作来针对
InnoDB
表进行优化。只能执行 非锁定读取 查询。可以使用语法START TRANSACTION READ ONLY
显式启动,或在某些条件下自动启动。有关详细信息,请参见 第 10.5.3 节,“优化 InnoDB 只读事务”。- 记录锁
对索引记录的 锁。例如,
SELECT c1 FROM t WHERE c1 = 10 FOR UPDATE;
会阻止任何其他事务插入、更新或删除t.c1
值为 10 的行。与 间隙锁 和 下一个键锁 相比。- 重做
当 DML 语句对
InnoDB
表进行更改时,记录在 重做日志 中的记录数据(以记录为单位)。它在 崩溃恢复 期间用于更正由未完成的 事务 写入的数据。不断增加的 LSN 值表示已通过重做日志的重做数据的累积量。- 重做日志
在 崩溃恢复 期间使用的基于磁盘的数据结构,用于更正由未完成的 事务 写入的数据。在正常操作期间,它对更改
InnoDB
表数据的请求进行编码,这些请求来自 SQL 语句或低级 API 调用。在意外 关闭 之前未完成更新 数据文件 的修改会自动重播。重做日志在磁盘上物理地表示为一组重做日志文件。重做日志数据以受影响的记录为单位进行编码;这些数据统称为 重做。数据通过重做日志的过程由不断增加的 LSN 值表示。
有关更多信息,请参见 第 17.6.5 节,“重做日志”
- 重做日志归档
一项
InnoDB
功能,启用后,会将重做日志记录按顺序写入归档文件,以避免在备份操作过程中备份实用程序无法跟上重做日志生成速度时可能发生的潜在数据丢失。有关更多信息,请参见 重做日志归档。另请参见 重做日志。
- 冗余行格式
最旧的
InnoDB
行格式。在 MySQL 5.0.3 之前,它是InnoDB
中唯一可用的行格式。从 MySQL 5.0.3 到 MySQL 5.7.8,默认行格式为 COMPACT。从 MySQL 5.7.9 开始,默认行格式由innodb_default_row_format
配置选项定义,该选项的默认设置为 DYNAMIC。您仍然可以为与旧的InnoDB
表兼容而指定 REDUNDANT 行格式。有关更多信息,请参见 第 17.10 节,“InnoDB 行格式”。
- 参照完整性
一种始终保持数据一致格式的技术,是 ACID 原则的一部分。具体来说,不同表中的数据通过使用 外键约束 保持一致,这可以防止更改发生或自动将这些更改传播到所有相关表。相关机制包括 唯一约束,它可以防止错误地插入重复值,以及 NOT NULL 约束,它可以防止错误地插入空值。
另请参阅 ACID、FOREIGN KEY 约束、NOT NULL 约束、唯一约束。
- 关系型
现代数据库系统的一个重要方面。数据库服务器对关系进行编码和强制执行,例如一对一、一对多、多对一和唯一性。例如,在一个地址数据库中,一个人可能拥有零个、一个或多个电话号码;单个电话号码可能与几个家庭成员相关联。在一个财务数据库中,一个人可能需要拥有一个唯一的纳税人 ID,并且任何纳税人 ID 只能与一个人相关联。
数据库服务器可以使用这些关系来防止插入错误数据,并找到有效的查找信息的方式。例如,如果一个值被声明为唯一的,服务器可以在找到第一个匹配项后停止搜索,并且可以拒绝尝试插入第二个相同值的副本。
在数据库级别,这些关系通过 SQL 特性来表达,例如表中的 列、唯一和
NOT NULL
约束、外键 以及不同类型的联接操作。复杂的关系通常涉及多个表之间的数据拆分。通常,数据被 规范化,以便在一对多关系中,重复值只存储一次。在数学环境中,数据库中的关系是从集合论推导出来的。例如,
WHERE
子句的OR
和AND
运算符表示并集和交集的概念。- 相关性
在 全文搜索 功能中,一个数字表示搜索字符串与 FULLTEXT 索引 中的数据之间的相似度。例如,当您搜索一个单词时,该单词在文本中出现多次的行通常比只出现一次的行更相关。
另请参阅 全文搜索、FULLTEXT 索引。
- 可重复读
InnoDB
的默认 隔离级别。它可以防止任何被查询的行被其他 事务 更改,从而阻止 不可重复读,但不能阻止 幻读。它使用一个中等严格的 锁定 策略,以便事务中的所有查询都查看来自同一快照的数据,即事务开始时的数据。当具有此隔离级别的交易执行
UPDATE ... WHERE
、DELETE ... WHERE
、SELECT ... FOR UPDATE
和LOCK IN SHARE MODE
操作时,其他事务可能需要等待。在 MySQL 8.0.1 中,
SELECT ... FOR SHARE
替换了SELECT ... LOCK IN SHARE MODE
,但LOCK IN SHARE MODE
仍然可用以实现向后兼容性。- 字符集
字符集是指字符集的集合。有关字符集的更多信息,请参见 第 12.2.1 节,“字符集”。
- 副本
在 复制 拓扑结构中,从另一个服务器(源)接收更改并应用相同更改的数据库 服务器 机器。因此,它维护与源相同的内容,尽管它可能略微落后。
在 MySQL 中,副本通常用于灾难恢复,以取代发生故障的源。它们也常用于测试软件升级和新设置,以确保数据库配置更改不会导致性能或可靠性问题。
副本通常具有高工作负载,因为它们处理从源中转发的所有 DML(写入)操作,以及用户查询。为了确保副本能够足够快地应用来自源的更改,它们通常具有快速 I/O 设备,以及足够的 CPU 和内存来在同一服务器上运行多个数据库实例。例如,源可能使用硬盘驱动器存储,而副本使用 SSD。
- 复制
将更改从 源 发送到一个或多个 副本 的做法,以便所有数据库都具有相同的数据。此技术有广泛的用途,例如用于提高可扩展性的负载平衡、灾难恢复以及测试软件升级和配置更改。更改可以通过称为 基于行的复制 和 基于语句的复制 的方法在数据库之间发送。
- 恢复
将 MySQL Enterprise Backup 产品的一组备份文件放置到位供 MySQL 使用的过程。此操作可以执行来修复损坏的数据库,以返回到过去某个时间点,或者(在 复制 上下文中)设置新的 副本。在 MySQL Enterprise Backup 产品中,此操作是通过
mysqlbackup
命令的copy-back
选项执行的。另请参阅 热备份、MySQL Enterprise Backup、mysqlbackup 命令、准备好的备份、副本、复制。
- 回滚
一个 SQL 语句,它结束一个 事务,撤消该事务所做的任何更改。它是 提交 的反面,它将事务中所做的任何更改永久保存。
默认情况下,MySQL 使用 自动提交 设置,它在每个 SQL 语句之后自动发出提交。您必须在使用回滚技术之前更改此设置。
- 回滚段
包含 撤消日志 的存储区域。回滚段传统上位于 系统表空间 中。从 MySQL 5.6 开始,回滚段可以位于 撤消表空间 中。从 MySQL 5.7 开始,回滚段也被分配到 全局临时表空间。
- 行
由一组 列 定义的逻辑数据结构。一组行构成一个 表。在
InnoDB
数据文件 中,每个 页 可以包含一个或多个行。尽管
InnoDB
使用术语 行格式 以保持与 MySQL 语法一致,但行格式是每个表的属性,并应用于该表中的所有行。- 行格式
InnoDB
表 的 行 的磁盘存储格式。随着InnoDB
获得了新的功能,例如 压缩,引入了新的行格式来支持由此产生的存储效率和性能改进。通过
ROW_FORMAT
选项或innodb_default_row_format
配置选项(在 MySQL 5.7.9 中引入)来指定InnoDB
表的行格式。行格式包括REDUNDANT
、COMPACT
、COMPRESSED
和DYNAMIC
。要查看InnoDB
表的行格式,请发出SHOW TABLE STATUS
语句或查询INFORMATION_SCHEMA
中的InnoDB
表元数据。- 行锁
一种 锁,它可以防止其他 事务 以不兼容的方式访问行。同一表中的其他行可以由其他事务自由写入。这是 DML 操作对 InnoDB 表执行的 锁定 类型。
与
MyISAM
使用的 表锁 或InnoDB
表上无法使用 在线 DDL 执行的 DDL 操作期间使用的表锁形成对比;这些锁会阻止对表的并发访问。- 基于行的复制
一种 复制 形式,其中事件从 源 传播,指定如何在 副本 上更改单个行。对于
innodb_autoinc_lock_mode
选项的所有设置,使用它都是安全的。- 行级锁定
用于 InnoDB 表的 锁定 机制,依赖于 行锁 而不是 表锁。多个 事务 可以同时修改同一个表。只有当两个事务试图修改同一行时,其中一个事务才会等待另一个事务完成(并释放其行锁)。
- Ruby
- Ruby API
mysql2
基于 libmysqlclient API 库,可用于开发 MySQL 应用程序的 Ruby 程序员。有关详细信息,请参见 第 31.11 节“MySQL Ruby API”。- 读写锁
InnoDB
用于表示和强制执行对内部内存数据结构的共享访问 锁 的低级对象,遵循某些规则。与 互斥锁 形成对比,InnoDB
使用互斥锁来表示和强制执行对内部内存数据结构的独占访问。互斥锁和读写锁统称为 闩锁。读写锁
类型包括s-锁
(共享锁)、x-锁
(排他锁)和sx-锁
(共享-排他锁)。s-锁
提供对公共资源的读取访问权限。x-锁
提供对公共资源的写入访问权限,同时不允许其他线程进行不一致的读取。sx-锁
提供对公共资源的写入访问权限,同时允许其他线程进行不一致的读取。sx-锁
是在 MySQL 5.7 中引入的,用于优化并发性并提高读写工作负载的可扩展性。
以下矩阵总结了读写锁类型兼容性。
S
SX
X
S
兼容 兼容 冲突 SX
兼容 冲突 冲突 X
冲突 冲突 冲突
S
- 保存点
保存点有助于实现嵌套 事务。它们可以用于为作为更大事务一部分的表上的操作提供范围。例如,在预订系统中安排旅行可能涉及预订几个不同的航班;如果所需的航班不可用,您可能需要 回滚 预订该航段所涉及的更改,而不会回滚之前成功预订的航班。
- 可扩展性
向系统添加更多工作并发出更多并发请求的能力,而不会因超过系统容量限制而导致性能突然下降。软件架构、硬件配置、应用程序编码和工作负载类型都在可扩展性中发挥作用。当系统达到其最大容量时,提高可扩展性的常用技术是 纵向扩展(提高现有硬件或软件的容量)和 横向扩展(添加新服务器和更多 MySQL 实例)。通常与 可用性 配合使用,作为大规模部署的关键方面。
- 横向扩展
通过添加新服务器和更多 MySQL 实例来提高 可扩展性 的技术。例如,设置复制、NDB 集群、连接池或其他将工作分散到一组服务器上的功能。与 纵向扩展 形成对比。
- 纵向扩展
通过提高现有硬件或软件的容量来提高 可扩展性 的技术。例如,增加服务器上的内存并调整与内存相关的参数,例如
innodb_buffer_pool_size
和innodb_buffer_pool_instances
。与 横向扩展 形成对比。- 模式
从概念上讲,模式是一组相互关联的数据库对象,例如表、表列、列的数据类型、索引、外键等等。这些对象通过 SQL 语法连接在一起,因为列构成表,外键引用表和列,等等。理想情况下,它们在逻辑上也相互连接,作为统一应用程序或灵活框架的一部分协同工作。例如,INFORMATION_SCHEMA 和 performance_schema 数据库在其名称中使用 “模式” 来强调它们包含的表和列之间的密切关系。
在 MySQL 中,从物理上讲,模式 与 数据库 同义。您可以在 MySQL SQL 语法中用关键字
SCHEMA
代替DATABASE
,例如使用CREATE SCHEMA
代替CREATE DATABASE
。一些其他数据库产品会区分它们。例如,在 Oracle 数据库产品中,模式 仅代表数据库的一部分:单个用户拥有的表和其他对象。
另请参见 数据库、INFORMATION_SCHEMA、性能模式。
- SDI
另请参见 序列化字典信息 (SDI)。
- 搜索索引
在 MySQL 中,全文搜索 查询使用一种特殊类型的索引,即 FULLTEXT 索引。在 MySQL 5.6.4 及更高版本中,
InnoDB
和MyISAM
表都支持FULLTEXT
索引;以前,这些索引仅适用于MyISAM
表。另请参阅 全文搜索、FULLTEXT 索引。
- 辅助索引
一种
InnoDB
索引 类型,表示表列的子集。一个InnoDB
表可以有零个、一个或多个辅助索引。(与 聚集索引 形成对比,聚集索引是每个InnoDB
表都需要的,并存储所有表列的数据。)辅助索引可用于满足仅需要索引列中值的查询。对于更复杂的查询,它可以用来标识表中相关的行,然后通过使用聚集索引进行查找来检索这些行。
创建和删除辅助索引传统上涉及复制
InnoDB
表中所有数据的重大开销。快速索引创建 功能使InnoDB
辅助索引的CREATE INDEX
和DROP INDEX
语句速度更快。- 段
InnoDB
表空间 内的划分。如果表空间类似于目录,那么段类似于该目录中的文件。段可以增长。可以创建新段。例如,在 每个表一个文件 表空间中,表数据在一个段中,每个相关索引都在其自己的段中。 系统表空间 包含许多不同的段,因为它可以容纳许多表及其相关的索引。在 MySQL 8.0 之前,系统表空间还包括一个或多个用于 撤消日志 的 回滚段。
段随着数据的插入和删除而增长和缩小。当段需要更多空间时,它会一次扩展一个 区(1 兆字节)。同样,当该区中所有数据不再需要时,段会释放一个区的空间。
- 选择性
数据分布的一个属性,指一列中不同值的个数(其 基数)除以表中记录的个数。高选择性意味着列值相对唯一,并且可以通过索引高效检索。如果(你或查询优化器)可以预测
WHERE
子句中的测试只匹配表中少量(或比例)的行,那么如果它首先使用索引评估该测试,总体 查询 往往很有效。- 半一致性读取
用于
UPDATE
语句的一种读取操作,它是 READ COMMITTED 和 一致性读取 的结合。当UPDATE
语句检查已锁定的行时,InnoDB
会将最新的已提交版本返回给 MySQL,以便 MySQL 可以确定该行是否与UPDATE
的WHERE
条件匹配。如果该行匹配(必须更新),MySQL 会再次读取该行,这次InnoDB
或者锁定它或者等待对它的锁定。这种类型的读取操作只有在事务具有 READ COMMITTED 隔离级别 时才会发生。参见 一致性读取,隔离级别,READ COMMITTED。
- SERIALIZABLE
使用最保守锁定策略的 隔离级别,以防止任何其他 事务 插入或更改此事务已读取的数据,直到它完成。这样,同一个查询可以在事务中反复运行,并确保每次检索到相同的结果集。任何试图更改自当前事务开始以来由另一个事务提交的数据的行为都会导致当前事务等待。
这是 SQL 标准指定的默认隔离级别。在实践中,这种程度的严格性很少需要,因此
InnoDB
的默认隔离级别是下一个最严格的级别,即 REPEATABLE READ。- 序列化字典信息 (SDI)
序列化形式的字典对象元数据。SDI 存储在
JSON
格式中。从 MySQL 8.0.3 开始,SDI 存在于所有
InnoDB
表空间文件中,除了临时表空间文件和撤消表空间文件。表空间文件中 SDI 的存在提供了元数据冗余。例如,可以使用 ibd2sdi 工具从表空间文件中提取字典对象元数据,如果数据字典不可用。对于
MyISAM
表,SDI 存储在模式目录中的.sdi
元数据文件中。执行IMPORT TABLE
操作需要 SDI 元数据文件。- 服务器
一种持续运行的程序类型,等待接收并处理来自另一个程序(客户端)的请求。因为通常整个计算机都专门用于运行一个或多个服务器程序(如数据库服务器、Web 服务器、应用程序服务器,或这些的组合),所以术语 服务器 也可能指运行服务器软件的计算机。
- 服务器端预处理语句
由 MySQL 服务器管理的 预处理语句。从历史上看,服务器端预处理语句的问题导致 Connector/J 和 Connector/PHP 开发人员有时使用 客户端端预处理语句 来代替。对于现代的 MySQL 服务器版本,建议使用服务器端预处理语句,以提高性能、可扩展性和内存效率。
- 服务主体名称
参见 主体。
- 服务票据
- servlet
另请参阅 Connector/J。
- 会话临时表空间
一个 临时表空间,它存储用户创建的 临时表 和 优化器 创建的内部临时表,当
InnoDB
被配置为内部临时表的磁盘存储引擎时。- 共享锁
- 共享表空间
指 系统表空间 或 通用表空间 的另一种方式。通用表空间在 MySQL 5.7 中引入。一个共享表空间可以驻留多个表。一个 每个表一个文件 表空间只能驻留一个表。
- 急切检查点
将所有 脏 缓冲池页面的 刷新 到磁盘的过程,这些页面的重做条目包含在 重做日志 的某个部分中。在
InnoDB
重用日志文件的一部分之前发生;日志文件以循环方式使用。通常发生在写入密集的 工作负载 中。- 关闭
停止 MySQL 服务器的过程。默认情况下,此过程会清理 InnoDB 表的操作,因此
InnoDB
关闭可能 缓慢,但随后启动速度很快。如果你跳过清理操作,则关闭 很快,但清理必须在下一次启动时执行。InnoDB
的关闭模式由innodb_fast_shutdown
选项控制。- 从服务器
参见 副本。
- 慢查询日志
一种 日志 类型,用于性能调整 MySQL 服务器处理的 SQL 语句。日志信息存储在文件中。你必须启用此功能才能使用它。你可以控制哪些类别的 “慢” SQL 语句被记录。有关更多信息,请参见 第 7.4.5 节,“慢查询日志”。
- 缓慢关闭
一种 关闭 类型,在完成之前会执行额外的
InnoDB
刷新操作。也称为 干净关闭。由配置参数innodb_fast_shutdown=0
或命令SET GLOBAL innodb_fast_shutdown=0;
指定。虽然关闭本身可能需要更长时间,但应在随后的启动时节省该时间。- 快照
- 排序缓冲区
在创建
InnoDB
索引时用于对数据进行排序的缓冲区。排序缓冲区大小使用innodb_sort_buffer_size
配置选项配置。- 源
在 复制 场景中,处理数据的初始插入、更新和删除请求的数据库服务器机器。这些更改会传播到称为 副本 的其他服务器,并在这些服务器上重复。
- 空间 ID
用于在 MySQL 实例中唯一标识
InnoDB
表空间 的标识符。系统表空间 的空间 ID 始终为零;此 ID 适用于系统表空间或通用表空间中的所有表。每个 每个表一个文件 表空间和 通用表空间 都有自己的空间 ID。在 MySQL 5.6 之前,这个硬编码的值在将
InnoDB
表空间文件从一个 MySQL 实例移动到另一个实例时带来了困难。从 MySQL 5.6 开始,您可以使用 可移植表空间 功能将表空间文件复制到不同实例之间,这涉及到使用FLUSH TABLES ... FOR EXPORT
、ALTER TABLE ... DISCARD TABLESPACE
和ALTER TABLE ... IMPORT TABLESPACE
语句。调整空间 ID 所需的信息包含在 .cfg 文件 中,您需要将它与表空间文件一起复制。有关详细信息,请参见 第 17.6.1.3 节,“导入 InnoDB 表”。- 稀疏文件
一种文件类型,通过将表示空块的元数据写入磁盘而不是写入实际的空空间,从而更有效地利用文件系统空间。
InnoDB
透明页压缩 功能依赖于稀疏文件支持。有关详细信息,请参见 第 17.9.2 节,“InnoDB 页压缩”。- 自旋
一种 等待 操作,它会不断地测试资源是否可用。这种技术用于通常只占用很短时间的资源,在这种情况下,在 “忙循环” 中等待比将线程置于休眠状态并执行上下文切换更有效。如果资源在短时间内无法使用,自旋循环将停止,并将使用其他等待技术。
- SPN
请参见 服务主体名称。
- Spring
一个基于 Java 的应用程序框架,旨在通过提供配置组件的方法来帮助应用程序设计。
另请参阅 J2EE。
- SQL
结构化查询语言,是执行数据库操作的标准。通常分为 DDL、DML 和 查询 三类。MySQL 包含一些额外的语句类别,例如 复制。有关 SQL 语法构建块的详细信息,请参见 第 11 章,语言结构;有关用于 MySQL 表列的数据类型的详细信息,请参见 第 13 章,数据类型;有关 SQL 语句及其相关类别的详细信息,请参见 第 15 章,SQL 语句;有关在查询中使用的标准和 MySQL 特定函数的详细信息,请参见 第 14 章,函数和运算符。
- SQLState
由 JDBC 标准定义的错误代码,用于使用 Connector/J 的应用程序的异常处理。
另请参见 Connector/J、JDBC。
- SSD
“固态硬盘”的缩写。一种存储设备,其性能特征与传统硬盘驱动器 (HDD) 不同:存储容量更小,随机读取速度更快,没有活动部件,并且在影响写入性能方面有一些注意事项。它的性能特征会影响 磁盘绑定 工作负载的吞吐量。
- SSL
- ST
请参见 服务票据。
- 启动
启动 MySQL 服务器的过程。通常由 第 6.3 节,“服务器和服务器启动程序” 中列出的程序之一完成。与 关闭 相反。
另请参见 关闭。
- 语句拦截器
一种用于跟踪、调试或增强数据库应用程序发出的 SQL 语句的 拦截器。有时也称为 命令拦截器。
在使用 Connector/J 的 Java 应用程序中,设置这种类型的拦截器涉及实现
com.mysql.jdbc.StatementInterceptorV2
接口,并在 连接字符串 中添加一个statementInterceptors
属性。在使用 Connector/NET 的 Visual Studio 应用程序中,设置这种类型的拦截器涉及定义一个从
BaseCommandInterceptor
类继承的类,并将该类名指定为连接字符串的一部分。另请参见 命令拦截器、连接字符串、Connector/J、Connector/NET、拦截器、Java、Visual Studio。
- 基于语句的复制
一种 复制 形式,其中 SQL 语句从 源 发送并重播到 副本 上。它需要对
innodb_autoinc_lock_mode
选项的设置进行一些注意,以避免 自动递增锁定 的潜在计时问题。- 统计信息
与每个
InnoDB
表 和 索引 相关的估计值,用于构建高效的 查询执行计划。主要值是 基数(不同值的个数)和表行或索引条目的总数。表统计信息表示其 主键 索引中的数据。辅助索引 的统计信息表示该索引覆盖的行。这些值是估计的,而不是精确统计的,因为在任何时刻,不同的 事务 都可以从同一个表中插入和删除行。为了防止频繁重新计算这些值,您可以启用 持久统计信息,其中这些值存储在
InnoDB
系统表中,并且只有在您发出ANALYZE TABLE
语句时才会刷新。您可以通过
innodb_stats_method
配置选项来控制计算统计信息时如何处理 NULL 值。其他类型的统计信息可通过 INFORMATION_SCHEMA 和 PERFORMANCE_SCHEMA 表获取数据库对象和数据库活动的统计信息。
另请参见 基数、索引、INFORMATION_SCHEMA、NULL、性能模式、持久统计信息、主键、查询执行计划、辅助索引、表、事务。
- 词干提取
能够根据一个共同的词根词搜索同一个词的不同变体,例如单数和复数,或过去时、现在时和将来时动词形式。此功能目前在
MyISAM
全文搜索 功能中支持,但在InnoDB
表的 FULLTEXT 索引 中不支持。另请参阅 全文搜索、FULLTEXT 索引。
- 停用词
在 FULLTEXT 索引 中,一个被认为是常用词或不重要的词,它会被从 搜索索引 中省略,并在搜索查询中被忽略。不同的配置设置控制
InnoDB
和MyISAM
表的停用词处理。有关详细信息,请参见 第 14.9.4 节,“全文停用词”。另请参见 FULLTEXT 索引、搜索索引。
- 存储引擎
MySQL 数据库的一个组件,它执行存储、更新和查询数据的底层工作。在 MySQL 5.5 及更高版本中,InnoDB 是新表的默认存储引擎,取代了
MyISAM
。不同的存储引擎在内存使用量与磁盘使用量、读取速度与写入速度以及速度与健壮性等因素之间进行了不同的权衡。每个存储引擎管理特定的表,因此我们指的是InnoDB
表、MyISAM
表等等。MySQL 企业版备份 产品针对
InnoDB
表的备份进行了优化。它也可以备份由MyISAM
和其他存储引擎处理的表。另请参见 InnoDB、MySQL 企业版备份、表类型。
- 存储生成列
一个列,其值是从列定义中包含的表达式计算出来的。当插入或更新行时,会评估列值并将其存储。存储生成列需要存储空间,并且可以被索引。
与 虚拟生成列 相比。
- 存储对象
- 存储程序
- 存储例程
- 严格模式
由
innodb_strict_mode
选项控制的设置的通用名称。启用此设置会导致通常被视为警告的某些条件被视为错误。例如,某些与 文件格式 和 行格式 相关的选项的无效组合,通常会产生警告并继续使用默认值,现在会导致CREATE TABLE
操作失败。innodb_strict_mode
在 MySQL 5.7 中默认启用。MySQL 还具有严格模式。请参阅 第 7.1.11 节,“服务器 SQL 模式”。
另请参阅 文件格式、innodb_strict_mode、行格式。
- 子列表
在表示 缓冲池 的列表结构中,相对较旧和相对较新的页面由 列表 的不同部分表示。一组参数控制这些部分的大小以及新旧页面之间的分界点。
- 最大值记录
索引中的 伪记录,表示该索引中最大值之上的 间隙。如果事务具有诸如
SELECT ... FROM ... WHERE col > 10 FOR UPDATE;
之类的语句,并且该列中的最大值为 20,则对最大值记录的锁定将阻止其他事务插入更大的值,例如 50、100 等。- 代理键
另请参阅 合成键。
- 合成键
一个索引列,通常是 主键,其中值是任意分配的。通常使用 自动递增 列来完成。通过将值视为完全任意,您可以避免过于严格的规则和错误的应用程序假设。例如,表示员工编号的数字序列如果员工已获准雇用但从未真正加入公司,则可能存在间隙。或者,如果员工 100 的入职日期晚于员工 500,则员工编号 100 可能比员工编号 500 的入职日期晚,如果他们离开公司后又重新加入。数值还产生可预测长度的较短值。例如,存储表示 “路”、“大道”、“高速公路” 等的数字代码比一遍又一遍地重复这些字符串更节省空间。
也称为 代理键。与 自然键 相反。
- 系统表空间
一个或多个数据文件(ibdata 文件),其中包含与
InnoDB
相关的对象的元数据,以及 更改缓冲区 和 双写缓冲区 的存储区域。如果表是在系统表空间中创建的,而不是在 每个表一个文件 或 通用表空间 中创建的,它也可能包含InnoDB
表的表和索引数据。系统表空间中的数据和元数据适用于 MySQL 实例 中的所有 数据库。在 MySQL 5.6.7 之前,默认情况下将所有
InnoDB
表和索引保存在系统表空间中,这通常会导致该文件变得非常大。由于系统表空间永远不会缩小,如果加载了大量临时数据然后将其删除,则可能会出现存储问题。在 MySQL 8.0 中,默认值为 每个表一个文件 模式,其中每个表及其相关索引都存储在单独的 .ibd 文件 中。此默认值使得更容易使用依赖于DYNAMIC
和COMPRESSED
行格式的InnoDB
功能,例如表 压缩、高效存储 非页列 以及大型索引键前缀。将所有表数据保存在系统表空间中或单独的
.ibd
文件中对一般存储管理有影响。 MySQL Enterprise Backup 产品可能会备份少量大型文件或许多较小的文件。在拥有数千个表的系统上,处理数千个.ibd
文件的文件系统操作会导致瓶颈。InnoDB
在 MySQL 5.7.6 中引入了通用表空间,它们也由.ibd
文件表示。通用表空间是使用CREATE TABLESPACE
语法创建的共享表空间。它们可以在数据目录之外创建,能够保存多个表,并支持所有行格式的表。另请参阅 更改缓冲区、压缩、数据字典、数据库、双写缓冲区、动态行格式、每个表一个文件、通用表空间、.ibd 文件、ibdata 文件、innodb_file_per_table、实例、MySQL Enterprise Backup、非页列、表空间、撤消日志。
T
- 表
每个 MySQL 表都与特定的 存储引擎 相关联。 InnoDB 表具有特定的 物理 和 逻辑 特性,这些特性会影响性能、可扩展性、备份、管理和应用程序开发。
在文件存储方面,
InnoDB
表属于以下表空间类型之一共享的
InnoDB
系统表空间,它由一个或多个 ibdata 文件 组成。每个表一个文件 表空间,由一个单独的 .ibd 文件 组成。
一个共享的 通用表空间,由一个单独的
.ibd
文件组成。通用表空间是在 MySQL 5.7.6 中引入的。
.ibd
数据文件包含表和 索引 数据。在每个表一个文件表空间中创建的
InnoDB
表可以使用 DYNAMIC 或 COMPRESSED 行格式。这些行格式启用了InnoDB
功能,例如 压缩、高效存储 非页列 以及大型索引键前缀。通用表空间支持所有行格式。系统表空间支持使用 REDUNDANT、COMPACT 和 DYNAMIC 行格式的表。在 MySQL 5.7.6 中添加了对 DYNAMIC 行格式的系统表空间支持。
InnoDB
表的 行 被组织到一个称为 聚集索引 的索引结构中,其中条目按表的 主键 列排序。数据访问针对过滤和按主键列排序的查询进行了优化,并且每个索引都包含与每个条目关联的主键列的副本。修改任何主键列的值都是一项昂贵的操作。因此,InnoDB
表设计的一个重要方面是选择一个主键,该主键的列用于最重要的查询,并保持主键简短,并且很少更改值。另请参阅 备份、聚集索引、紧凑行格式、压缩行格式、压缩、动态行格式、快速索引创建、每个表一个文件、.ibd 文件、索引、非页列、主键、冗余行格式、行、系统表空间、表空间。
- 表锁
一种锁定,阻止任何其他 事务 访问表。
InnoDB
尽最大努力使此类锁定变得不必要,方法是使用诸如 在线 DDL、行锁 和 一致读取 之类的技术来处理 DML 语句和 查询。您可以使用 SQL 通过LOCK TABLE
语句创建此类锁定;从其他数据库系统或 MySQL 存储引擎迁移的步骤之一是在切实可行的情况下删除此类语句。- 表扫描
请参阅 全表扫描。
- 表统计信息
请参见统计。
- 表类型
- 表空间
一个数据文件,可以保存一个或多个
InnoDB
表格 和相关的 索引。该 系统表空间 包含
InnoDB
数据字典,并且在 MySQL 5.6 之前,默认情况下包含所有其他InnoDB
表格。该
innodb_file_per_table
选项,在 MySQL 5.6 及更高版本中默认启用,允许表格在其自己的表空间中创建。每个表格的表空间支持高效存储 非页面列、表格压缩和可移植表空间等功能。有关详细信息,请参见 第 17.6.3.2 节,“每个表格的表空间”。InnoDB
在 MySQL 5.7.6 中引入了通用表空间。通用表空间是使用CREATE TABLESPACE
语法创建的共享表空间。它们可以在 MySQL 数据目录之外创建,能够保存多个表格,并支持所有行格式的表格。MySQL NDB 集群也将它的表格分组到表空间中。有关详细信息,请参见 第 25.6.11.1 节,“NDB 集群磁盘数据对象”。
另请参见 压缩行格式,数据字典,数据文件,每个表格,通用表空间,索引,innodb_file_per_table,系统表空间,表格。
- Tcl
一种源自 Unix 脚本世界的编程语言。有时由使用 C、C++ 或 Java 编写的代码扩展。有关 MySQL 的开源 Tcl API,请参见 第 31.12 节,“MySQL Tcl API”。
另请参见 API。
- 临时表格
一个 表格,它的数据不需要真正永久化。例如,临时表格可以用作复杂计算或转换中中间结果的存储区域;这些中间数据在崩溃后不需要恢复。数据库产品可以通过各种捷径来提高对临时表格的操作的性能,方法是减少对磁盘写入数据的严格程度以及其他保护数据在重启期间不受影响的措施。
有时,数据本身会在预定的时间自动删除,例如在事务结束时或会话结束时。对于一些数据库产品,表格本身也会自动删除。
另请参见 表格。
- 临时表空间
InnoDB
使用两种类型的临时表空间。会话临时表空间 存储用户创建的临时表格和优化器创建的内部临时表格。全局临时表空间 存储对用户创建的临时表格所做的更改的 回滚段。- 文本集合
另请参见 FULLTEXT 索引。
- TGS
一个 Kerberos 票证授权服务器。TGS 也可以指票证授权服务器提供的票证授权服务。
另请参见 票证授权服务器。
- TGT
请参见 票证授权票证。
- 线程
- 票证授权服务器
在 Kerberos 中,一个提供票证的服务器。票证授权服务器 (TGS) 与身份验证服务器 (AS) 共同构成密钥分发中心 (KDC)。
TGS 也可以指票证授权服务器提供的票证授权服务。
- 票证授权票证
在 Kerberos 中,票证授权票证被提供给票证授权服务器 (TGS) 以获取用于服务访问的服务票证。
另请参见 票证授权服务器。
- Tomcat
一个开源 J2EE 应用程序服务器,实现 Java Servlet 和 JavaServer Pages 编程技术。它由一个 Web 服务器和 Java Servlet 容器组成。对于 MySQL,通常与 Connector/J 结合使用。
另请参阅 J2EE。
- 撕裂页
一种错误状态,可能是由于 I/O 设备配置和硬件故障的组合而发生的。如果数据以小于
InnoDB
页面大小(默认情况下为 16KB)的块写入,则硬件故障在写入期间可能会导致页面的一部分存储到磁盘。该InnoDB
双写缓冲区 可以防止这种情况的发生。另请参见 双写缓冲区。
- TPS
是 “事务 每秒” 的缩写,是一个有时在基准测试中使用的计量单位。它的值取决于特定基准测试所代表的 工作负载,以及您控制的因素,例如硬件容量和数据库配置。
- 事务
事务是原子工作单元,可以 提交 或 回滚。当一个事务对数据库进行多个更改时,要么所有更改在事务提交时成功,要么所有更改在事务回滚时被撤销。
数据库事务(如
InnoDB
所实现的那样)具有以首字母缩略词 ACID 共同表示的属性,代表原子性、一致性、隔离性和持久性。- 事务 ID
与每个 行 关联的内部字段。该字段被
INSERT
、UPDATE
和DELETE
操作物理更改,以记录哪个 事务 锁定了该行。- 透明页面压缩
在 MySQL 5.7.8 中添加的功能,允许对位于 每个表格 表空间中的
InnoDB
表格进行页面级压缩。页面压缩通过使用CREATE TABLE
或ALTER TABLE
指定COMPRESSION
属性来启用。有关更多信息,请参见 第 17.9.2 节,“InnoDB 页面压缩”。- 可移植表空间
一项功能,允许将一个 表空间 从一个实例移动到另一个实例。传统上,对于
InnoDB
表空间来说,这是不可能的,因为所有表格数据都是 系统表空间 的一部分。在 MySQL 5.6 及更高版本中,FLUSH TABLES ... FOR EXPORT
语法准备一个InnoDB
表格以复制到另一个服务器;在另一个服务器上运行ALTER TABLE ... DISCARD TABLESPACE
和ALTER TABLE ... IMPORT TABLESPACE
会将复制的数据文件引入另一个实例。一个单独的 .cfg 文件(与 .ibd 文件 一起复制)用于更新表格元数据(例如 空间 ID),以便在导入表空间时更新。有关用法信息,请参见 第 17.6.1.3 节,“导入 InnoDB 表格”。- 故障排除
- 截断
一种 DDL 操作,它会删除表中的所有内容,但保留表本身和相关的索引。与 drop 相比。尽管在概念上它与没有
WHERE
子句的DELETE
语句具有相同的结果,但它在幕后的工作方式不同:InnoDB
会创建一个新的空表,删除旧表,然后重命名新表以替换旧表。由于这是一个 DDL 操作,因此它无法 回滚。如果被截断的表包含引用另一个表的 外键,则截断操作会使用一种较慢的操作方法,一次删除一行,以便在
ON DELETE CASCADE
子句需要时可以删除被引用表中的对应行。(MySQL 5.5 及更高版本不允许这种较慢的截断形式,如果涉及外键,则会返回错误。在这种情况下,请使用DELETE
语句代替。)- 信任库
另请参见 SSL。
- 元组
一个技术术语,用于指定有序元素集。这是一个抽象概念,用于数据库理论的正式讨论。在数据库领域,元组通常由表行的列表示。它们也可以由查询的结果集表示,例如,只检索表中某些列或来自联接表的列的查询。
另见 游标。
- 两阶段提交
作为分布式 事务的一部分的操作,根据 XA 规范。(有时缩写为 2PC。)当多个数据库参与事务时,所有数据库要么 提交更改,要么所有数据库 回滚更改。
U
- 撤销
在整个 事务的生命周期中维护的数据,记录所有更改,以便在 回滚操作的情况下可以撤销它们。它存储在 撤销日志中,该日志位于 系统表空间(在 MySQL 5.7 或更早版本中)或单独的 撤销表空间中。从 MySQL 8.0 开始,撤销日志默认情况下位于撤销表空间中。
- 撤销缓冲区
参见 撤销日志。
- 撤销日志
一个存储区域,用于保存活动 事务修改的数据副本。如果另一个事务需要查看原始数据(作为 一致性读取操作的一部分),则未修改的数据将从此存储区域检索。
在 MySQL 5.6 和 MySQL 5.7 中,可以使用
innodb_undo_tablespaces
变量使撤销日志驻留在 撤销表空间中,该表空间可以放置在另一个存储设备上,例如 SSD。在 MySQL 8.0 中,撤销日志驻留在两个默认的撤销表空间中,这两个表空间在 MySQL 初始化时创建,可以使用CREATE UNDO TABLESPACE
语法创建额外的撤销表空间。撤销日志分为两个部分,插入撤销缓冲区和 更新撤销缓冲区。
- 撤销日志段
一组 撤销日志。撤销日志段存在于 回滚段中。撤销日志段可能包含来自多个事务的撤销日志。撤销日志段一次只能被一个事务使用,但在事务 提交或 回滚后可以重复使用。也可能称为 “撤销段”。
- 撤销表空间
撤销表空间包含 撤销日志。撤销日志存在于 撤销日志段中,这些段位于 回滚段中。回滚段传统上驻留在系统表空间中。从 MySQL 5.6 开始,回滚段可以驻留在撤销表空间中。在 MySQL 5.6 和 MySQL 5.7 中,撤销表空间的数量由
innodb_undo_tablespaces
配置选项控制。在 MySQL 8.0 中,当 MySQL 实例初始化时,会创建两个默认的撤销表空间,可以使用CREATE UNDO TABLESPACE
语法创建额外的撤销表空间。有关更多信息,请参见 第 17.6.3.4 节,“撤销表空间”。
- Unicode
支持国家字符、字符集、代码页和其他国际化方面的系统,以灵活且标准化的方式。
Unicode 支持是 ODBC 标准的重要方面。 Connector/ODBC 5.1 是一个 Unicode 驱动程序,而不是 Connector/ODBC 3.51,后者是一个 ANSI 驱动程序。
另见 ANSI、Connector/ODBC、ODBC。
- 唯一约束
一种 约束,它断言一列不能包含任何重复值。在 关系代数方面,它用于指定 1 对 1 关系。为了有效地检查是否可以插入值(即值在列中不存在),唯一约束由底层的 唯一索引支持。
- 唯一索引
在具有 唯一约束的列或列集上的索引。由于已知索引不包含任何重复值,因此某些类型的查找和计数操作比普通索引更有效。针对此类型索引的大多数查找只是为了确定某个值是否存在。索引中的值数量与表中的行数相同,或者至少与具有与关联列相关的非空值的行的数量相同。
更改缓冲优化不适用于唯一索引。作为解决方法,可以在将大量数据加载到
InnoDB
表中时暂时设置unique_checks=0
。- 唯一键
包含 唯一索引的一组列(一个或多个)。当可以定义与一行完全匹配的
WHERE
条件时,并且查询可以使用关联的唯一索引,则查找和错误处理可以非常有效地执行。- UPN
参见 用户主体名称。
- 用户主体名称
参见 主体。
V
- 变长类型
变长的数据类型。
VARCHAR
、VARBINARY
以及BLOB
和TEXT
类型是变长类型。InnoDB
将长度大于或等于 768 字节的固定长度字段视为变长字段,可以 离页存储。例如,如果字符集的最大字节长度大于 3,则CHAR(255)
列可以超过 768 字节,就像使用utf8mb4
一样。- 受害者
当检测到 死锁时,会自动选择 回滚的 事务。
InnoDB
会回滚更新行数最少的事务。死锁检测可以使用
innodb_deadlock_detect
配置选项禁用。- 视图
- 虚拟列
请参阅 虚拟生成列。
- 虚拟生成列
一个列,其值由列定义中包含的表达式计算得出。列值不存储,而是在读取行时,紧接在任何
BEFORE
触发器之后进行评估。虚拟生成列不占用存储空间。InnoDB
支持在虚拟生成列上建立二级索引。与 存储生成列 相比。
- 虚拟索引
虚拟索引是一个建立在一个或多个 虚拟生成列 或虚拟生成列与普通列或存储生成列的组合上的 二级索引。有关更多信息,请参见 第 15.1.20.9 节,“二级索引和生成列”。
- Visual Studio
有关支持的 Visual Studio 版本,请参见以下参考资料
Connector/NET: Connector/NET 版本
Connector/C++ 8.0: 平台支持和先决条件
另请参见 Connector/C++、Connector/NET。
W
- 等待
当操作(如获取 锁、互斥量 或 闩锁)无法立即完成时,
InnoDB
会暂停并尝试再次执行。暂停机制非常复杂,因此此操作有自己的名称,即 等待。使用内部InnoDB
调度、操作系统wait()
调用和短持续时间的 自旋 循环的组合来暂停各个线程。在负载繁重且事务众多的系统上,您可能使用
SHOW INNODB STATUS
命令或 性能架构 的输出确定线程是否花费了太多时间等待,如果是,则如何改善 并发性。- 热备份
在数据库运行时执行的 备份,但它会在备份过程中限制某些数据库操作。例如,表可能变为只读。对于繁忙的应用程序和网站,您可能更喜欢 热备份。
- 预热
在启动后,在典型 工作负载 下运行系统一段时间,以便 缓冲池 和其他内存区域按正常情况下的填充方式进行填充。当 MySQL 服务器重新启动或经历新的工作负载时,此过程会自然地发生。
通常,您在运行性能测试之前会运行工作负载一段时间来预热缓冲池,以确保在多次运行中获得一致的结果;否则,第一次运行的性能可能会人为地降低。
在 MySQL 5.6 中,您可以通过启用
innodb_buffer_pool_dump_at_shutdown
和innodb_buffer_pool_load_at_startup
配置选项来加快预热过程,以便在重新启动后将缓冲池的内容带回到内存中。这些选项在 MySQL 5.7 中默认启用。请参见 第 17.8.3.6 节,“保存和恢复缓冲池状态”。- 工作负载
在典型或高峰使用期间,数据库应用程序执行的 SQL 和其他数据库操作的组合和数量。您可以在性能测试期间对数据库施加特定工作负载,以识别 瓶颈,或在容量规划期间。
- 写入合并
一种优化技术,它在 脏页 从
InnoDB
缓冲池 中 刷新 时减少写入操作。如果页中的行被多次更新,或同一页上的多行被更新,则所有这些更改都将存储到数据文件中,一次写入操作,而不是每次更改一次写入操作。
X
Y
- 年轻
InnoDB
缓冲池 中 页 的一个特征,表示它最近被访问过,因此它在缓冲池数据结构中移动,以便它不会被 LRU 算法过早地 刷新。此术语在与缓冲池相关的表的一些 INFORMATION_SCHEMA 列名中使用。另请参见 缓冲池、刷新、INFORMATION_SCHEMA、LRU、页。