这些术语通常用于有关 MySQL 数据库服务器的信息中。
A
- .ARM 文件
ARCHIVE
表的元数据。与 .ARZ 文件 相反。扩展名为此扩展名的文件始终包含在 MySQL 企业版备份 产品的mysqlbackup
命令生成的备份中。另请参见 .ARZ 文件、MySQL 企业版备份、mysqlbackup 命令。
- .ARZ 文件
ARCHIVE 表的数据。与 .ARM 文件 相反。扩展名为此扩展名的文件始终包含在 MySQL 企业版备份 产品的
mysqlbackup
命令生成的备份中。另请参见 .ARM 文件、MySQL 企业版备份、mysqlbackup 命令。
- ACID
ACID 是原子性、一致性、隔离性和持久性的缩写。这些属性对于数据库系统都是理想的,并且都与 事务 的概念密切相关。
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 系统中编译代码的库,通过 Connector/NET 访问。存储在 GAC 中,以允许版本控制,而不会发生命名冲突。
- 异步 I/O
一种允许在 I/O 完成之前进行其他处理的 I/O 操作类型。也称为 非阻塞 I/O,缩写为 AIO。
InnoDB
在某些可以并行运行而不会影响数据库可靠性的操作中使用此类型的 I/O,例如将尚未实际请求但可能很快需要用到的页面读入 缓冲池。历史上,
InnoDB
仅在 Windows 系统上使用异步 I/O。从 InnoDB 插件 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 操作相关联的 数据字典 更新、存储引擎 操作和 二进制日志 写入组合到一个原子事务中。即使服务器在操作过程中停止,事务也会完全提交或回滚。MySQL 8.0 中添加了原子 DDL 支持。有关更多信息,请参见 第 15.1.1 节,“原子数据定义语句支持”。
- 原子指令
- 认证服务器
在 Kerberos 中,提供获得获得其他票证所需的票证授予票证 (TGT) 所需的初始票证的服务。认证服务器 (AS) 与 TGS 共同构成密钥分发中心 (KDC)。
- 自动递增
表列的属性(由
AUTO_INCREMENT
关键字指定),自动在该列中添加一个递增的值序列。它为开发人员节省了工作,不需在插入新行时生成新的唯一值。它为查询优化器提供了有用的信息,因为已知该列不为空且具有唯一值。此类列中的值可以在各种上下文中用作查找键,并且由于它们是自动生成的,因此没有理由更改它们;因此,主键列通常被指定为自动递增。
基于语句的复制中自动递增列可能存在问题,因为在副本上重放语句可能不会生成与源上相同的列值集,这是由于计时问题造成的。当您有一个自动递增主键时,您只能在具有设置
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
选项,以便您可以配置和优化自动递增值的预测序列与插入操作的最高 并发性之间的平衡。- 自动提交
一种在每个 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 Header 部分,该部分位于 MySQL 内部手册 中。参见 哈希索引。
- 反引号
MySQL SQL 语句中的标识符必须使用反引号字符 (
`
) 引用,如果它们包含特殊字符或保留字。例如,要引用名为FOO#BAR
的表或名为SELECT
的列,您应将其指定为`FOO#BAR`
和`SELECT`
。由于反引号提供了额外的安全级别,因此它们在程序生成的 SQL 语句中被广泛使用,因为标识符名称可能事先未知。许多其他数据库系统在这些特殊名称周围使用双引号 (
"
)。为了可移植性,您可以在 MySQL 中启用ANSI_QUOTES
模式并使用双引号而不是反引号来限定标识符名称。参见 SQL。
- 备份
从 MySQL 实例复制部分或所有表数据和元数据的过程,以备安全保存。也可以指复制的文件集。这是 DBA 的一项重要任务。此过程的逆过程是 还原 操作。
使用 MySQL,物理备份 由 MySQL 企业备份 产品执行,而 逻辑备份 由
mysqldump
命令执行。这些技术在备份数据的大小和表示方式以及速度(尤其是恢复操作的速度)方面具有不同的特点。备份还根据它们对正常数据库操作的干扰程度进一步分为 热备份、温备份 或 冷备份。(热备份干扰最小,冷备份干扰最大。)
- 基列
- 测试版
软件产品生命周期的早期阶段,此时它仅供评估使用,通常没有确定的发布号或小于 1 的发布号。
InnoDB
不使用测试版名称,而是倾向于使用 早期采用者 阶段,该阶段可以跨越多个点发布,最终导致 GA 发布。- 二进制日志
一个文件,其中包含尝试更改表数据的全部语句或行更改的记录。二进制日志的内容可以重放,以便在 复制 场景中将副本更新到最新状态,或者在从备份中恢复表数据后将数据库更新到最新状态。二进制日志功能可以打开和关闭,尽管 Oracle 建议在使用复制或执行备份时始终启用它。
您可以使用 mysqlbinlog 命令检查二进制日志的内容,或在复制或恢复期间重放它。有关二进制日志的完整信息,请参见 第 7.4.4 节,“二进制日志”。有关与二进制日志相关的 MySQL 配置选项,请参见 第 19.1.6.4 节,“二进制日志选项和变量”。
对于 MySQL 企业备份 产品,二进制日志的文件名和文件中当前的位置是重要的详细信息。为了在复制上下文中执行备份时记录源的此信息,您可以指定
--slave-info
选项。在 MySQL 5.0 之前,可以使用类似的功能,称为更新日志。在 MySQL 5.0 及更高版本中,二进制日志取代了更新日志。
另请参见 binlog、MySQL 企业备份、复制。
- 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++。
- 缓存
- 基数
表 列 中不同值的个数。当查询引用具有关联 索引 的列时,每个列的基数会影响哪种访问方法最有效。例如,对于具有 唯一约束 的列,不同值的个数等于表中的行数。如果表有一百万行,但某一列只有 10 个不同的值,则每个值(平均)出现 100,000 次。因此,类似于
SELECT c1 FROM t1 WHERE c1 = 50;
的查询可能会返回 1 行或大量行,并且数据库服务器可能会根据c1
的基数以不同的方式处理该查询。如果列中的值分布非常不均匀,基数可能不是确定最佳查询计划的良好方法。例如,
SELECT c1 FROM t1 WHERE c1 = x;
当x=50
时可能会返回 1 行,而当x=30
时可能会返回一百万行。在这种情况下,您可能需要使用 索引提示 来传递有关哪个查找方法对特定查询更有效的建议。基数也可以应用于多个列中存在的不同值的个数,如在 组合索引 中。
- 变更缓冲区
一种特殊的数据结构,它记录对 页面 的更改,这些更改在 辅助索引 中。这些值可能是由 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
配置选项控制。在 MySQL 5.6.3 中弃用了innodb_checksums
,并由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 Database 产品中,这种类型的表被称为 索引组织表。
- 冷备份
- 列
行 中的数据项,其存储和语义由数据类型定义。每个 表 和 索引 在很大程度上由它包含的列集定义。
每列都有一个 基数 值。列可以是其表的 主键,也可以是主键的一部分。列可以受 唯一约束、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 的默认行格式。在 MySQL 8.0 中,默认行格式由 **
innodb_default_row_format
** 配置选项定义,该选项的默认设置为 **DYNAMIC**。**COMPACT** 行格式比 **REDUNDANT** 行格式为 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
- 一致性读取
使用 快照 信息的读取操作,以在某个时间点上呈现查询结果,而与同时运行的其他事务执行的更改无关。如果查询的数据已被另一个事务更改,则将根据 撤消日志 的内容重建原始数据。此技术避免了某些可能会通过强制事务等待其他事务完成来降低 并发性 的 锁定 问题。
使用 REPEATABLE READ 隔离级别,快照基于执行第一个读取操作的时间。使用 READ COMMITTED 隔离级别,快照会重置为每个一致性读取操作的时间。
一致性读取是
InnoDB
在 READ COMMITTED 和 REPEATABLE READ 隔离级别中处理SELECT
语句的默认模式。由于一致性读取不会对它访问的表设置任何锁,因此其他会话在对表执行一致性读取时可以自由修改这些表。有关适用隔离级别的技术详细信息,请参见 第 17.7.2.3 节“一致性非锁定读取”。
另请参阅 并发性、隔离级别、锁定、READ COMMITTED、REPEATABLE READ、快照、事务、撤消日志。
- 约束
一种自动测试,可以阻止数据库更改以防止数据变得不一致。(在计算机科学术语中,一种与不变条件相关的断言。)约束是 ACID 哲学的关键组成部分,用于维护数据一致性。MySQL 支持的约束包括 外键约束 和 唯一约束。
- 计数器
通过特定类型的
InnoDB
操作递增的值。对于衡量服务器繁忙程度、排查性能问题的根源以及测试更改(例如,对配置设置或查询使用的索引)是否具有预期的低级效果很有用。可以通过 性能架构 表和 INFORMATION_SCHEMA 表(尤其是INFORMATION_SCHEMA.INNODB_METRICS
)获得不同类型的计数器。另请参阅 INFORMATION_SCHEMA、指标计数器、性能架构。
- 覆盖索引
包含查询检索的所有列的 索引。查询不会使用索引值作为指针查找完整的表行,而是从索引结构中返回值,从而节省磁盘 I/O。由于
InnoDB
辅助索引 还包括 主键 列,因此它可以对比 MyISAM 应用此优化技术对更多索引进行优化。对于针对已由事务修改的表的查询,InnoDB
无法应用此技术,直到该事务结束为止。任何 列索引 或 复合索引 都有可能充当覆盖索引,前提是查询正确。尽可能设计索引和查询,以利用这种优化技术。
- CPU 密集型
一种 工作负载 类型,其主要 瓶颈 是内存中的 CPU 操作。通常涉及读取密集型操作,其中所有结果都可以在 缓冲池 中缓存。
- 崩溃
MySQL 使用术语 “崩溃” 来泛指服务器无法执行正常清理的任何意外 关闭 操作。例如,崩溃可能是由于数据库服务器机器或存储设备上的硬件故障、电源故障、可能导致 MySQL 服务器停止的数据不匹配、DBA 启动的 快速关闭 或许多其他原因造成的。 InnoDB 表的强大、自动的 崩溃恢复 可确保在重新启动服务器时数据变得一致,而无需 DBA 额外工作。
- 崩溃恢复
MySQL 在 崩溃 后再次启动时发生的清理活动。对于 InnoDB 表,使用 重做日志 中的数据重放来自不完整事务的更改。在崩溃之前 提交 的更改(但尚未写入 数据文件)将从 双写缓冲区 中重建。当数据库正常关闭时,此类型的活动将在关闭期间由 清除 操作执行。
在正常操作期间,提交的数据可以在写入数据文件之前在 更改缓冲区 中存储一段时间。在使数据文件保持最新(这会引入正常操作期间的性能开销)和缓冲数据(这会导致关闭和崩溃恢复时间更长)之间始终存在权衡。
- CRUD
“创建、读取、更新、删除” 的缩写,数据库应用程序中常见的操作序列。通常表示一类具有相对简单的数据库使用(DDL、DML 和 查询 语句的简单 SQL)的应用程序,这些应用程序可以在任何语言中快速实现。
- 游标
表示 SQL 语句结果集的内部 MySQL 数据结构。通常与 预处理语句 和 动态 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 Database 背景的用户可能会发现 MySQL 中的数据库意义更接近 Oracle Database 所谓的 模式。
- 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
语句时,行会立即被标记为已删除,并且查询不再返回它们。存储将在稍后的某个时间回收,在称为 清除 操作的定期垃圾回收期间。对于删除大量数据,具有自身性能特征的相关操作是 截断 和 删除。- 删除缓冲
将
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
“数据库源名称” 的缩写。它是 Connector/ODBC 中 连接 信息的编码。有关完整详细信息,请参见 在 Windows 上配置 Connector/ODBC DSN。它等效于 Connector/NET 使用的 连接字符串。
- 动态游标
ODBC 支持的一种 游标 类型,它可以在再次读取行时拾取新的和更改的结果。更改是否以及何时对游标可见取决于所涉及的表类型(事务性或非事务性)以及事务性表的隔离级别。必须显式启用对动态游标的支持。
- 动态行格式
一个
InnoDB
行格式。因为长可变长度列值存储在不包含行数据的页之外,所以它对于包含大型对象的行非常有效。由于大型字段通常不访问以评估查询条件,因此它们不会像以前那样频繁地被带入 缓冲池,从而导致更少的 I/O 操作以及更好的缓存内存利用率。从 MySQL 5.7.9 开始,默认行格式由
innodb_default_row_format
定义,其默认值为DYNAMIC
。有关
InnoDB
DYNAMIC
行格式的更多信息,请参见 DYNAMIC 行格式.- 动态 SQL
允许您使用比将语句各个部分连接到字符串变量的简单技术更健壮、更安全、更高效的方法来创建和执行 预处理语句 的功能。
参见 预处理语句.
- 动态语句
E
- 早期采用者
与 beta 阶段类似,此时软件产品通常在非关键任务环境中进行性能、功能和兼容性评估。
另请参见 beta。
- Eiffel
一种包含许多面向对象特性的编程语言。它的一些概念对 Java 和 C# 开发人员来说很熟悉。有关适用于 MySQL 的开源 Eiffel API,请参阅 第 31.13 节,“MySQL Eiffel 包装器”。
- 嵌入式
嵌入式 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
隔离级别 REPEATABLE READ 通过允许事务读取具有排他锁的行来实现更高的 并发性,这种技术称为 一致读取。- 扩展
表空间 中的一组 页。对于默认的 页大小 16KB,一个扩展包含 64 个页。在 MySQL 5.6 中,
InnoDB
实例的页大小可以是 4KB、8KB 或 16KB,由innodb_page_size
配置选项控制。对于 4KB、8KB 和 16KB 的页大小,扩展大小始终为 1MB(或 1048576 字节)。在 MySQL 5.7.6 中添加了对 32KB 和 64KB
InnoDB
页大小的支持。对于 32KB 的页大小,扩展大小为 2MB。对于 64KB 的页大小,扩展大小为 4MB。InnoDB
功能(如 段、预读 请求和 双写缓冲区)使用一次读取、写入、分配或释放数据的扩展进行 I/O 操作。
F
- .frm 文件
包含 MySQL 表元数据(如表定义)的文件。在 MySQL 8.0 中删除了
.frm
文件,但在早期 MySQL 版本中仍在使用。在 MySQL 8.0 中,以前存储在.frm
文件中的数据存储在 数据字典 表中。另请参见 数据字典、MySQL 企业备份、系统表空间。
- 故障转移
在发生故障时自动切换到备用服务器的能力。在 MySQL 上下文中,故障转移涉及一个备用数据库服务器。通常在 J2EE 环境中由应用程序服务器或框架支持。
另请参见 Connector/J、J2EE。
- 快速索引创建
InnoDB 插件首次引入的一项功能,现在是 MySQL 5.5 及更高版本的一部分,通过避免完全重写相关表来加速
InnoDB
辅助索引 的创建。此加速也适用于删除辅助索引。由于索引维护可能会给许多数据传输操作增加性能开销,因此请考虑在没有辅助索引的情况下执行
ALTER TABLE ... ENGINE=INNODB
或INSERT INTO ... SELECT * FROM ...
等操作,并在之后创建索引。在 MySQL 5.6 中,此功能变得更加通用。您可以在创建索引时读取和写入表,并且许多其他类型的
ALTER TABLE
操作可以在不复制表的情况下执行,也不会阻塞 DML 操作,或者两者兼而有之。因此,在 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 企业备份 产品对于位于其自身文件中的表而言更加灵活。例如,可以将表从备份中排除,但前提是它们位于单独的文件中。因此,此设置适用于不经常备份或按不同时间表备份的表。
另请参见 压缩行格式、压缩、文件格式、.ibd 文件、ibdata 文件、innodb_file_per_table、MySQL 企业备份、行格式、系统表空间。
- 填充因子
在
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
“普遍可用”,软件产品离开 测试版 阶段,可供销售、获得官方支持和投入生产使用。
另请参见 beta。
- 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 操作的一种 事务 类型。它由几个本身就是事务的 action 组成,但所有这些 action 必须作为一个组成功完成,或者作为一个组回滚。从本质上讲,这将 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 产品称为 MySQL 企业备份,它专门用于
InnoDB
表,但也用于MyISAM
和其他存储引擎的表。热备份过程包含两个阶段。对数据文件的初始复制会生成一个 原始备份。应用步骤会将备份运行期间发生的数据库更改合并到备份中。应用更改会生成一个 准备好的 备份;这些文件随时可以恢复。
另请参见 应用、MySQL 企业备份、准备好的备份、原始备份。
I
- .ibd 文件
每表一个文件 表空间和通用表空间的数据文件。每表一个文件表空间
.ibd
文件包含一个表和相关索引数据。通用表空间.ibd
文件可能包含多个表的表和索引数据。.ibd
文件扩展名不适用于 系统表空间,系统表空间由一个或多个 ibdata 文件 组成。如果使用
DATA DIRECTORY =
子句创建每表一个文件表空间或通用表空间,则.ibd
文件位于指定路径,位于正常的 data 目录之外。当 MySQL 企业备份 产品将
.ibd
文件包含在压缩备份中时,压缩后的等效文件为.ibz
文件。另请参见 数据库、每表一个文件、通用表空间、ibdata 文件、.ibz 文件、innodb_file_per_table、MySQL 企业备份、系统表空间。
- .ibz 文件
当 MySQL 企业备份 产品执行 压缩备份 时,它会将使用 每表一个文件 设置创建的每个 表空间 文件从
.ibd
扩展名转换为.ibz
扩展名。备份期间应用的压缩与在正常操作期间将表数据压缩的 压缩行格式 不同。压缩备份操作会跳过对已经采用压缩行格式的表空间的压缩步骤,因为再次压缩会减慢备份速度,但不会产生太多空间节省。
- I/O 绑定
参见 磁盘绑定。
- ib 文件集
MySQL 数据库中
InnoDB
管理的文件集:系统表空间、每表一个文件 表空间文件和 重做日志 文件。根据 MySQL 版本和InnoDB
配置,还可能包括 通用表空间、临时表空间 和 撤消表空间 文件。在详细讨论InnoDB
文件结构和格式时,此术语有时用于指代 MySQL 数据库中InnoDB
管理的文件集。- ibbackup_logfile
在 热备份 操作期间,MySQL 企业备份 产品创建的补充备份文件。它包含有关备份运行期间发生的任何数据更改的信息。包括
ibbackup_logfile
在内的初始备份文件称为 原始备份,因为备份操作期间发生的更改尚未合并。在对原始备份文件执行 应用 步骤之后,生成的文件将包括这些最终数据更改,并被称为 准备好的备份。在此阶段,ibbackup_logfile
文件不再需要。另请参见 应用、热备份、MySQL 企业备份、准备好的备份、原始备份。
- 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
,则默认行为是在 data 目录中创建单个自动扩展的 12MB 数据文件,名为ibtmp1
,与ibdata1
位于同一目录中。- ib_logfile
一组文件,通常名为
ib_logfile0
和ib_logfile1
,它们构成 重做日志。有时也称为 日志组。这些文件记录试图更改InnoDB
表中数据的语句。这些语句会在启动后自动重放,以纠正不完整事务写入的错误数据。这些数据不能用于手动恢复;对于此类操作,请使用 二进制日志。
- ilist
在
InnoDB
FULLTEXT 索引 中,数据结构包含一个文档 ID 和一个令牌(即特定单词)的位置信息。另请参见 FULLTEXT 索引。
- 隐式行锁
另请参见 行锁。
- 内存数据库
一种类型的数据库系统,它在内存中维护数据,以避免由于磁盘 I/O 和磁盘块与内存区域之间的转换而产生的开销。一些内存数据库会牺牲持久性(“D” 在 ACID 设计理念中),并且容易受到硬件、电源和其他类型故障的影响,使其更适合只读操作。其他内存数据库确实使用持久性机制,例如将更改记录到磁盘或使用非易失性内存。
MySQL 的一些功能可以解决相同类型的内存密集型处理,包括
InnoDB
缓冲池、自适应哈希索引 和 只读事务 优化、MEMORY
存储引擎、MyISAM
密钥缓存和 MySQL 查询缓存。- 增量备份
由 MySQL 企业备份 产品执行的一种 热备份,它只保存自某个时间点以来更改的数据。拥有一个完整备份和一系列增量备份,您可以重建长时间内的备份数据,而无需将多个完整备份存储在一起的存储开销。您可以恢复完整备份,然后依次应用每个增量备份,或者您可以通过将每个增量备份应用到完整备份来保持完整备份的最新状态,然后执行单个恢复操作。
更改数据的粒度在 页面 级。一个页面实际上可能包含多个行。每个更改的页面都包含在备份中。
另请参见 热备份、MySQL 企业备份、页面。
- 索引
一种数据结构,它为 表的 行 提供快速查找功能,通常通过形成树结构(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 系列。
- 插入
DML 在 SQL 中的主要操作之一。插入的性能是 数据仓库 系统的关键因素,这些系统将数百万行加载到表中,而 OLTP 系统则允许许多并发连接以任意顺序将行插入到同一表中。如果插入性能对您很重要,您应该了解 InnoDB 功能,例如 插入缓冲区(用于 更改缓冲)和 自动递增 列。
- 插入缓冲区
更改缓冲区 的旧名称。在 MySQL 5.5 中,添加了对对
DELETE
和UPDATE
操作的辅助索引页面的更改进行缓冲的支持。以前,只有INSERT
操作产生的更改被缓冲。现在首选的术语是 更改缓冲区。- 插入缓冲
将
INSERT
操作产生的对辅助索引页面的更改存储在 更改缓冲区 中而不是立即写入更改的技术,以便可以执行物理写入以最大程度地减少随机 I/O。它是 更改缓冲 的类型之一;其他类型是 删除缓冲 和 清除缓冲。如果辅助索引是 唯一 的,则不会使用插入缓冲,因为在写入新条目之前无法验证新值的唯一性。其他类型的更改缓冲确实适用于唯一索引。
- 插入意向锁
一种由
INSERT
操作在行插入之前设置的 间隙锁。这种类型的 锁 表示插入的意图,这样,如果多个事务插入到同一个索引间隙中,而它们没有在间隙内的相同位置插入,则它们不必相互等待。有关更多信息,请参见 第 17.7.1 节,“InnoDB 锁定”。- 实例
一个管理 数据目录 的 mysqld 守护程序,该目录表示一个或多个具有 表 集的 数据库。在开发、测试和某些 复制 场景中,在同一 服务器 机器上拥有多个实例很常见,每个实例管理自己的数据目录并在自己的端口或套接字上侦听。如果一个实例运行 磁盘绑定 工作负载,服务器可能仍然有额外的 CPU 和内存容量来运行其他实例。
- 检测
在源代码级别进行修改以收集性能数据以进行调整和调试。在 MySQL 中,通过使用
INFORMATION_SCHEMA
和PERFORMANCE_SCHEMA
数据库的 SQL 接口公开检测收集的数据。- 意向排他锁
参见 意向锁。
- 意向锁
一种应用于表的 锁,用于指示 事务 意图在表中获取的行上的锁类型。不同的事务可以在同一表上获取不同类型的意向锁,但第一个在表上获取 意向排他 (IX) 锁的事务会阻止其他事务在表上获取任何 S 或 X 锁。反之,第一个在表上获取 意向共享 (IS) 锁的事务会阻止其他事务在表上获取任何 X 锁。两阶段过程允许按照顺序解决锁请求,而不会阻塞锁和相应的兼容操作。有关此锁定机制的更多信息,请参见 第 17.7.1 节,“InnoDB 锁定”。
- 意向共享锁
参见 意向锁。
- 拦截器
- 内在临时表
参见 优化器。
- 倒排索引
一种针对文档检索系统优化的数据结构,用于实现
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
请参阅 密钥分发中心。
- 密钥分发中心
- 密钥库
另请参阅 SSL。
- KEY_BLOCK_SIZE
用于指定使用 压缩行格式 的
InnoDB
表中的数据页大小的选项。 默认值为 8 KB。 较小的值可能会达到取决于行大小和压缩百分比组合的内部限制。对于
MyISAM
表,KEY_BLOCK_SIZE
可选地指定用于索引键块的大小(以字节为单位)。 该值被视为提示;如果需要,可以使用其他大小。 为单个索引定义指定的KEY_BLOCK_SIZE
值会覆盖表级KEY_BLOCK_SIZE
值。另请参阅 压缩行格式。
L
- 闩锁
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 Enterprise Backup 产品中,您可以指定一个 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 Enterprise Backup 产品的 mysqlbackup 命令生成的备份中。- .MYD 文件
MySQL 用于存储
MyISAM
表数据的文件。- .MYI 文件
MySQL 用于存储
MyISAM
表索引的文件。- 主服务器
请参阅 源。
- 主线程
一个
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 及更高版本中,
INNODB_METRICS
表(位于 INFORMATION_SCHEMA 中)实现的功能。您可以查询低级InnoDB
操作的 计数 和总数,并将结果与 性能模式 中的数据结合使用,以进行性能调整。另请参阅 计数器,INFORMATION_SCHEMA,性能模式.
- 中点插入策略
将 页面 初始带入
InnoDB
缓冲池 的技术,不是放在列表的 “最新” 结尾,而是放在中间的某个地方。此点的确切位置可能会因innodb_old_blocks_pct
选项的设置而异。其意图是,只读一次的页面(例如,在 全表扫描 期间)可以比使用严格的 LRU 算法更早地从缓冲池中老化。有关更多信息,请参阅 第 17.5.1 节“缓冲池”.- 微型事务
InnoDB
处理的内部阶段,在 DML 操作期间对内部数据结构进行 物理 级别的更改。微型事务 (mtr) 没有 回滚 的概念;多个微型事务可以在单个 事务 中发生。微型事务将信息写入 重做日志,该日志在 崩溃恢复 期间使用。微型事务也可以在常规事务的上下文中之外发生,例如,在后台线程进行 清除 处理期间。- 混合模式插入
一条
INSERT
语句,其中对一些但不是所有新行指定了 自动递增 值。例如,多值INSERT
可以指定某些情况下的自动递增列的值,以及其他情况下的NULL
。InnoDB
为自动递增列的值指定为NULL
的行生成自动递增值。另一个例子是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
值;这些值只是没有在索引中表示。在列上声明NOT NULL
约束可以确保没有行被排除在索引之外,从而允许更好的查询优化(准确计算行数并估计是否使用索引)。由于 主键 必须能够唯一标识表中的每一行,因此单列主键不能包含任何
NULL
值,多列主键不能包含任何所有列中都具有NULL
值的行。虽然 Oracle 数据库允许将
NULL
值与字符串连接,但InnoDB
将此类操作的结果视为NULL
。
O
- .OPT 文件
包含数据库配置信息的 文件。扩展名为该类型的文件包含在 MySQL 企业版备份 产品的 mysqlbackup 命令生成的备份中。
- ODBC
Open Database Connectivity(开放式数据库连接)的首字母缩写,它是一个行业标准 API。通常与基于 Windows 的服务器一起使用,或与需要 ODBC 与 MySQL 通信的应用程序一起使用。MySQL ODBC 驱动程序称为 Connector/ODBC。
另请参阅 Connector/ODBC.
- 溢出页列
包含可变长度数据(例如
BLOB
和VARCHAR
)的列,其长度太长而无法容纳在 B 树 页上。数据存储在 溢出页 中。对于此类存储,DYNAMIC 行格式比旧的 COMPACT 行格式更有效。- OLTP
Online Transaction Processing(联机事务处理)的首字母缩写。一种数据库系统或数据库应用程序,它运行具有许多 事务 的工作负载,这些工作负载频繁写入和读取,通常一次只影响少量数据。例如,航空公司预订系统或处理银行存款的应用程序。数据可能以 规范化 的形式组织,以在 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 文件
包含分区定义的 文件。扩展名为该类型的文件包含在 MySQL 企业版备份 产品的
mysqlbackup
命令生成的备份中。随着 MySQL 5.7.6 为
InnoDB
表引入本地分区支持,.par
文件不再为分区的InnoDB
表创建。分区的MyISAM
表在 MySQL 5.7 中继续使用.par
文件。在 MySQL 8.0 中,分区支持仅由InnoDB
存储引擎提供。因此,从 MySQL 8.0 开始不再使用.par
文件。- 页
代表
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 使用 autocommit 设置,该设置会在每个 SQL 语句之后自动发出提交。您必须更改此设置才能使用回滚技术。
另请参阅 ACID、autocommit、提交、SQL、事务。
- 回滚段
包含 撤消日志 的存储区域。回滚段传统上位于 系统表空间 中。从 MySQL 5.6 开始,回滚段可以位于 撤消表空间 中。从 MySQL 5.7 开始,回滚段也被分配到 全局临时表空间 中。
- 行
由一组 列 定义的逻辑数据结构。一组行构成一个 表。在
InnoDB
数据文件 中,每个 页 可以包含一个或多个行。尽管
InnoDB
使用 行格式 一词来与 MySQL 语法保持一致,但行格式是每个表的属性,并适用于该表中的所有行。- 行格式
InnoDB
表 中 行 的磁盘存储格式。随着InnoDB
获得了新的功能,例如 压缩,引入了新的行格式来支持由此带来的存储效率和性能的改进。InnoDB
表的行格式由ROW_FORMAT
选项或innodb_default_row_format
配置选项(在 MySQL 5.7.9 中引入)指定。行格式包括REDUNDANT
、COMPACT
、COMPRESSED
和DYNAMIC
。要查看InnoDB
表的行格式,请发出SHOW TABLE STATUS
语句或查询INFORMATION_SCHEMA
中的InnoDB
表元数据。- 行锁
一种 锁,它可以防止其他 事务 以不兼容的方式访问行。同一表中的其他行可以被其他事务自由写入。这是 InnoDB 表上的 DML 操作所做的 锁定 类型。
与
MyISAM
使用的 表锁 或InnoDB
表上无法使用 在线 DDL 执行的 DDL 操作期间使用的表锁形成对比;这些锁会阻止对表的并发访问。- 基于行的复制
一种 复制 形式,其中事件从 源 传播,指定如何在 副本 上更改单个行。对于
innodb_autoinc_lock_mode
选项的所有设置,都可以安全地使用此形式。- 行级锁定
用于 InnoDB 表的 锁定 机制,依赖于 行锁 而不是 表锁。多个 事务 可以同时修改同一个表。只有当两个事务尝试修改同一行时,其中一个事务才会等待另一个事务完成(并释放其行锁)。
- Ruby
- Ruby API
基于 libmysqlclient API 库的
mysql2
可用于开发 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 Cluster、连接池或将工作分散到一组服务器上的其他功能。与 纵向扩展 形成对比。
- 纵向扩展
通过增加现有硬件或软件的容量来提高 可伸缩性 的技术。例如,增加服务器上的内存并调整与内存相关的参数,例如
innodb_buffer_pool_size
和innodb_buffer_pool_instances
。与 横向扩展 形成对比。- 架构
从概念上讲,架构是一组相互关联的数据库对象,例如表、表列、列的数据类型、索引、外键等。这些对象通过 SQL 语法连接,因为列构成表,外键引用表和列,等等。理想情况下,它们在逻辑上也是相互关联的,作为一个统一的应用程序或灵活的框架协同工作。例如,INFORMATION_SCHEMA 和 performance_schema 数据库在它们的名称中使用 “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)
从 MySQL 8.0.3 开始,除了临时表空间和撤消表空间文件之外,所有
InnoDB
表空间文件都包含 SDI。表空间文件中 SDI 的存在提供了元数据冗余。例如,如果数据字典不可用,可以使用ibd2sdi实用程序从表空间文件中提取字典对象元数据。对于
MyISAM
表,SDI 存储在模式目录中的.sdi
元数据文件中。执行IMPORT TABLE
操作需要 SDI 元数据文件。- 服务器
一种持续运行的程序,等待接收来自另一个程序(客户端)的请求并对其进行处理。因为通常将整个计算机专门用于运行一个或多个服务器程序(例如数据库服务器、Web 服务器、应用程序服务器或这些服务器的组合),所以术语服务器也可以指运行服务器软件的计算机。
- 服务器端预处理语句
由 MySQL 服务器管理的预处理语句。历史上,服务器端预处理语句的问题导致Connector/J和Connector/PHP开发人员有时会使用客户端端预处理语句。在现代的 MySQL 服务器版本中,服务器端预处理语句是提高性能、可扩展性和内存效率的推荐方法。
- 服务主体名称
另请参见 主体。
- 服务票证
- servlet
另请参阅 Connector/J.
- 会话临时表空间
- 共享锁
- 共享表空间
另一种表示系统表空间或通用表空间的方式。通用表空间在 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 之前,这个硬编码的值给在 MySQL 实例之间移动
InnoDB
表空间文件带来了困难。从 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、Performance Schema、持久统计信息、主键、查询执行计划、辅助索引、表、事务。
- 词干提取
能够根据一个共同的词根搜索单词的不同变体,例如单数和复数,或者动词的过去时、现在时和将来时。此功能目前在
MyISAM
全文搜索 功能中受支持,但在InnoDB
表的 FULLTEXT 索引 中不受支持。另请参阅 全文搜索、FULLTEXT 索引。
- 停用词
在 FULLTEXT 索引 中,一个词被认为是常见的或微不足道的,以至于它被从 搜索索引 中省略,并在搜索查询中被忽略。不同的配置设置控制
InnoDB
和MyISAM
表的停用词处理。有关详细信息,请参见 第 14.9.4 节,“全文停用词”。另请参见 FULLTEXT 索引、搜索索引。
- 存储引擎
MySQL 数据库的一个组件,它执行存储、更新和查询数据的底层工作。在 MySQL 5.5 及更高版本中,InnoDB 是新表的默认存储引擎,取代了
MyISAM
。不同的存储引擎在内存使用量与磁盘使用量、读取速度与写入速度以及速度与健壮性等因素之间具有不同的权衡。每个存储引擎管理特定的表,因此我们称之为InnoDB
表、MyISAM
表等。MySQL Enterprise Backup 产品针对备份
InnoDB
表进行了优化。它还可以备份由MyISAM
和其他存储引擎处理的表。另请参见 InnoDB、MySQL Enterprise Backup、表类型。
- 存储生成列
一列,其值由包含在列定义中的表达式计算得出。当插入或更新行时,列值将被计算并存储。存储生成列需要存储空间,并且可以被索引。
与 虚拟生成列 相反。
- 存储对象
- 存储程序
- 存储例程
- 严格模式
由
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 的入职日期晚,如果他们离开了公司后来又重新加入。数值还生成更短且长度可预测的值。例如,存储表示 “路”、“大道”、“高速公路” 等等的数字代码比反复重复这些字符串更节省空间。
也称为 代理键。与 自然键 相反。
- 系统表空间
一个或多个数据文件(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 行格式的表。系统表空间对 DYNAMIC 行格式的支持是在 MySQL 5.7.6 中添加的。
InnoDB
表的 行 被组织成一种称为 聚集索引 的索引结构,其条目根据表的 主键 列排序。数据访问针对在主键列上进行筛选和排序的查询进行了优化,并且每个索引都包含每个条目的相关主键列的副本。修改任何主键列的值都是一项昂贵的操作。因此,InnoDB
表设计的关键方面是选择主键,该主键包含在最重要查询中使用的列,并且保持主键简短,并且值很少改变。另请参阅 备份、聚集索引、紧凑行格式、压缩行格式、压缩、动态行格式、快速索引创建、每个表一个文件、.ibd 文件、索引、非页面列、主键、冗余行格式、行、系统表空间、表空间。
- 表锁
一种锁,它阻止任何其他 事务 访问表。
InnoDB
做出相当大的努力来使此类锁变得不必要,通过使用诸如 在线 DDL、行锁 和 一致性读取 之类的技术来处理 DML 语句和 查询。您可以使用 SQL 通过LOCK TABLE
语句创建此类锁;从其他数据库系统或 MySQL 存储引擎迁移的步骤之一是在实际可行的地方删除此类语句。- 表扫描
请参阅 全表扫描。
- 表统计信息
请参阅 统计信息。
- 表类型
- 表空间
一个数据文件,可以保存一个或多个
InnoDB
表格 和关联的 索引。系统表空间 包含
InnoDB
数据字典,在 MySQL 5.6 之前,默认情况下,它保存所有其他InnoDB
表格。在 MySQL 5.6 及更高版本中,默认情况下启用的
innodb_file_per_table
选项允许在它们自己的表空间中创建表格。每个文件一个表空间支持诸如 页面外列、表格压缩和可移植表空间等的有效存储功能。有关详细信息,请参阅 第 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
语句。)另请参阅 DDL、drop、foreign key、rollback。
- 信任库
另请参阅 SSL。
- 元组
一个用于指定元素的有序集合的技术术语。这是一个抽象概念,用于数据库理论的正式讨论中。在数据库领域,元组通常由表的行的列表示。它们也可以由查询的结果集表示,例如,只检索表某些列或连接表的列的查询。
另请参阅 cursor。
- 两阶段提交
一个属于分布式事务的操作,它在XA规范下执行。(有时缩写为 2PC。)当多个数据库参与事务时,所有数据库都会提交更改,或者所有数据库都会回滚更改。
另请参阅 commit、rollback、transaction、XA。
U
- 撤消
在事务的整个生命周期中维护的数据,记录所有更改,以便在回滚操作的情况下可以撤消这些更改。它存储在撤消日志中,这些日志位于系统表空间(在 MySQL 5.7 或更早版本中)或单独的撤消表空间中。从 MySQL 8.0 开始,撤消日志默认情况下位于撤消表空间中。
另请参阅 rollback、rollback segment、system tablespace、transaction、undo log、undo tablespace。
- 撤消缓冲区
参见 undo log。
- 撤消日志
一个存储区域,用于保存活动事务修改的数据副本。如果另一个事务需要查看原始数据(作为一致性读取操作的一部分),则会从该存储区域中检索未修改的数据。
在 MySQL 5.6 和 MySQL 5.7 中,您可以使用
innodb_undo_tablespaces
变量将撤消日志存储在撤消表空间中,这些表空间可以放置在其他存储设备上,例如SSD。在 MySQL 8.0 中,撤消日志位于两个默认的撤消表空间中,这些表空间是在 MySQL 初始化时创建的,可以使用CREATE UNDO TABLESPACE
语法创建额外的撤消表空间。撤消日志被分为不同的部分,即插入撤消缓冲区和更新撤消缓冲区。
另请参阅 consistent read、rollback segment、SSD、system tablespace、transaction、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 节,“撤消表空间”。
另请参阅 rollback segment、system tablespace、undo log、undo log segment。
- Unicode
一个用于以灵活且标准化的方式支持国家字符、字符集、代码页和其他国际化方面的系统。
Unicode 支持是ODBC标准的一个重要方面。Connector/ODBC 5.1 是一个 Unicode 驱动程序,与 Connector/ODBC 3.51 相反,后者是一个ANSI驱动程序。
另请参阅 ANSI、Connector/ODBC、ODBC。
- 唯一约束
一种约束,它断言列不能包含任何重复值。在关系型代数方面,它用于指定 1 对 1 关系。为了有效地检查是否可以插入值(即,该值在列中不存在),唯一约束由底层的唯一索引支持。
另请参阅 constraint、relational、unique index。
- 唯一索引
在具有唯一约束的列或列集上的索引。因为已知索引不包含任何重复值,所以某些类型的查找和计数操作比普通索引更有效。对这种索引的大多数查找只是为了确定某个值是否存在。索引中的值数量与表中的行数相同,或者至少与关联列非空值的行数相同。
更改缓冲优化不适用于唯一索引。作为一种解决方法,您可以在将大量数据加载到
InnoDB
表中时暂时设置unique_checks=0
。另请参阅 cardinality、change buffering、unique constraint、unique key。
- 唯一键
构成唯一索引的列集(一个或多个)。当您可以定义一个
WHERE
条件来精确匹配一行,并且查询可以使用相关的唯一索引时,查找和错误处理可以非常高效地执行。- UPN
参见 用户主体名称。
- 用户主体名称
另请参见 主体。
V
- 可变长度类型
可变长度的数据类型。
VARCHAR
、VARBINARY
以及BLOB
和TEXT
类型都是可变长度类型。InnoDB
将长度大于或等于 768 字节的固定长度字段视为可变长度字段,可以脱页存储。例如,如果字符集的最大字节长度大于 3(如utf8mb4
),则CHAR(255)
列可能会超过 768 字节。另请参阅 off-page column、overflow page。
- 受害者
当检测到死锁时,自动选择被回滚的事务。
InnoDB
会回滚更新行数最少的事务。死锁检测可以使用
innodb_deadlock_detect
配置选项禁用。另请参阅 deadlock、deadlock detection、innodb_lock_wait_timeout、transaction。
- 视图
- 虚拟列
请参阅 虚拟的生成列。
- 虚拟生成的列
从列定义中包含的表达式计算值的列。 列值不存储,而是在读取行时计算,紧随任何
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、页。