MySQL8-中文参考-五十六-

MySQL8 中文参考(五十六)

原文:docs.oracle.com/javase/tutorial/reallybigindex.html

事务隔离级别索引

原文:dev.mysql.com/doc/refman/8.0/en/dynindex-isolevel.html

R | S

R

[索引顶部]

读取已提交

第 17.7.2.3 节,“一致的非锁定读取”

第 25.4.3.6 节,“定义 NDB 集群数据节点”

第 25.2.6.1 节,“NDB 和 InnoDB 存储引擎之间的差异”

第 20.3.2 节,“组复制限制”

第 17.7.5.3 节,“如何最小化和处理死锁”

第 17.7.1 节,“InnoDB 锁定”

第 17.14 节,“InnoDB 启动选项和系统变量”

第 25.2.7.3 节,“NDB 集群中与事务处理相关的限制”

第 17.7.3 节,“InnoDB 中由不同 SQL 语句设置的锁”

第 A.1 节,“MySQL 8.0 常见问题解答:常规”

第 A.10 节,“MySQL 8.0 常见问题解答:NDB 集群”

第 25.2.6.3 节,“NDB 和 InnoDB 特性使用摘要”

第 10.5.2 节,“优化 InnoDB 事务管理”

第 15.3.7 节,“SET TRANSACTION 语句”

第 7.4.4.2 节,“设置二进制日志格式”

第 29.12.7.1 节,“events_transactions_current 表”

第 17.7.2.1 节,“事务隔离级别”

第 1.3 节,“MySQL 8.0 中的新功能”

第 25.2.4 节,“MySQL NDB 集群 8.0 中的新功能”

读取未提交

第 17.7.2.3 节,“一致的非锁定读取”

第 17.8.10.1.4 节,“在持久性统计计算中包含删除标记记录”

第 17.20.2 节,“InnoDB memcached 架构”

第 17.14 节,“InnoDB 启动选项和系统变量”

第 25.2.7.3 节,“NDB 集群中与事务处理相关的限制”

第 17.20.6.6 节,“在底层 InnoDB 表上执行 DML 和 DDL 语句”

第 15.3.7 节,“SET TRANSACTION 语句”

第 7.4.4.2 节,“设置二进制日志格式”

第 29.12.7.1 节,“events_transactions_current 表”

第 17.7.2.1 节,“事务隔离级别”

READ-COMMITTED

第 7.1.7 节,“服务器命令选项”

第 15.3.7 节,“SET TRANSACTION 语句”

READ-UNCOMMITTED

第 7.1.7 节,“服务器命令选项”

第 15.3.7 节,“SET TRANSACTION 语句”

REPEATABLE READ

第 17.7.2.3 节,“一致的非锁定读取”

第 17.20.6.4 节,“控制 InnoDB memcached 插件的事务行为”

第 20.3.2 节,“组复制限制”

第 17.7.1 节,“InnoDB 锁定”

第 17.14 节,“InnoDB 启动选项和系统变量”

第 25.2.7.3 节,“NDB 集群中与事务处理相关的限制”

第 7.4.4.3 节,“混合二进制日志格式”

第 6.5.4 节,“mysqldump —— 数据库备份程序”

第 6.5.6 节,“mysqlpump —— 一个数据库备份程序”

第 10.5.2 节,“优化 InnoDB 事务管理”

第 29.12.7 节,“性能模式事务表”

第 15.3.7 节,“SET TRANSACTION 语句”

第 15.3.1 节,“START TRANSACTION,COMMIT 和 ROLLBACK 语句”

第 29.12.7.1 节,“events_transactions_current 表”

第 17.7.2.1 节,“事务隔离级别”

第 1.3 节,“MySQL 8.0 中的新功能”

第 15.3.8 节,“XA 事务”

REPEATABLE-READ

第 7.1.7 节,“服务器命令选项”

第 7.1.8 节,“服务器系统变量”

第 15.3.7 节,“SET TRANSACTION 语句”

S

[索引顶部]

SERIALIZABLE

第 20.3.2 节,“组复制限制”

第 17.7.1 节,“InnoDB 锁定”

第 17.14 节,“InnoDB 启动选项和系统变量”

第 25.2.7.3 节,“NDB 集群中与事务处理相关的限制”

第 17.7.3 节,“InnoDB 中由不同 SQL 语句设置的锁”

第 7.4.4.3 节,“混合二进制日志格式”

第 29.12.7 节,“性能模式事务表”

第 7.1.7 节,“服务器命令选项”

第 15.3.7 节,“SET TRANSACTION 语句”

第 15.3.1 节,“START TRANSACTION,COMMIT 和 ROLLBACK 语句”

第 29.12.7.1 节,“events_transactions_current 表”

第 17.7.2.1 节,“事务隔离级别”

第 15.3.8 节,“XA 事务”

MySQL 术语表

原文:dev.mysql.com/doc/refman/8.0/en/glossary.html

这些术语通常用于关于 MySQL 数据库服务器的信息。

A

.ARM 文件

ARCHIVE 表的元数据。与.ARZ 文件相对比。具有此扩展名的文件始终包含在 MySQL 企业备份 产品的 mysqlbackup 命令生成的备份中。

参见 .ARZ 文件, MySQL 企业备份, mysqlbackup 命令。

.ARZ 文件

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

参见 .ARM 文件, MySQL 企业备份, mysqlbackup 命令。

ACID

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

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

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

事务在进行中受到保护(隔离);它们不能相互干扰或看到彼此的未提交数据。这种隔离是通过锁定机制实现的。有经验的用户可以调整隔离级别,在确保事务确实不会相互干扰时,权衡较少的保护以换取增加的性能和并发性

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

参见原子,提交,并发性,双写缓冲区,隔离级别,锁定,回滚,事务。

自适应刷新

一种针对InnoDB表的算法,平滑了检查点引入的 I/O 开销。MySQL 不再一次性将所有修改的缓冲池刷新到数据文件,而是定期刷新一小组修改的页。自适应刷新算法通过估计执行这些定期刷新的最佳速率,基于刷新速率和生成重做信息的速度,扩展了这个过程。

参见缓冲池,检查点,数据文件,刷新,InnoDB,页,重做日志。

自适应哈希索引

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

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

参见 B 树,缓冲池,哈希索引,页,二级索引。

ADO.NET

用于使用.NET 技术构建的应用程序的对象关系映射(ORM)框架,如ASP.NET。这类应用程序可以通过Connector/NET组件与 MySQL 进行接口交互。

参见.NET,ASP.net,Connector/NET,Mono,Visual Studio。

AIO

异步 I/O的缩写。您可能会在InnoDB消息或关键字中看到这个缩写。

参见异步 I/O。

ANSI

ODBC中,支持字符集和其他国际化方面的另一种方法。与Unicode形成对比。Connector/ODBC 3.51 是一个 ANSI 驱动程序,而 Connector/ODBC 5.1 是一个 Unicode 驱动程序。

参见连接器/ODBC,ODBC,Unicode。

API

API 为客户端程序提供对 MySQL 协议和 MySQL 资源的低级访问。与连接器提供的高级访问形成对比。

参见 C API,客户端,连接器,本机 C API,Perl API,PHP API,Python API,Ruby API。

应用程序编程接口(API)

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

应用

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

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

参见热备份,ibbackup_logfile,MySQL Enterprise Backup,准备备份,原始备份。

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中,以允许版本控制而不产生命名冲突。

另请参阅.NET,GAC。

异步 I/O

一种 I/O 操作,允许其他处理在 I/O 完成之前继续进行。也称为非阻塞 I/O,缩写为AIOInnoDB在某些可以并行运行而不影响数据库可靠性的操作中使用这种类型的 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。

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

原子

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

另请参阅 ACID,提交,回滚,事务。

原子 DDL

原子DDL语句是将与 DDL 操作相关的数据字典更新、存储引擎操作和二进制日志写入组合成一个单一的原子事务的语句。即使服务器在操作期间停止,事务也会完全提交或回滚。原子 DDL 支持在 MySQL 8.0 中添加。更多信息,请参阅 Section 15.1.1, “原子数据定义语句支持”。

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

原子指令

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

认证服务器

在 Kerberos 中,提供获取票据授予票证(TGT)所需的初始票证的服务,该票证需要从票证授予服务器(TGS)获取其他票证。认证服务器(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_autoinc_lock_mode,主键,基于行的复制,基于语句的复制。

自增锁定

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

参见自增,并发性,innodb_autoinc_lock_mode。

自动提交

一种在每个SQL语句之后执行提交操作的设置。不建议在涉及跨多个语句的InnoDB表的事务中使用此模式。对于在InnoDB表上执行只读事务,尤其是在 MySQL 5.6.4 及更高版本中,可以提高性能,减少锁定撤销数据生成的开销。也适用于与MyISAM表一起使用,其中事务不适用。

另请参见 commit,locking,read-only transaction,SQL,transaction,undo。

可用性

具备处理并在必要时从主机故障中恢复的能力,包括 MySQL、操作系统或硬件以及可能导致停机的维护活动。通常与可伸缩性一起作为大规模部署的关键方面。

另请参见 scalability。

B

B 树

一种在数据库索引中常用的树数据结构。该结构始终保持排序,使得可以快速查找精确匹配(等于运算符)和范围(例如,大于、小于和BETWEEN运算符)。这种类型的索引适用于大多数存储引擎,如InnoDBMyISAM

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

哈希索引相对,哈希索引仅在MEMORY存储引擎中可用。MEMORY存储引擎也可以使用 B 树索引,如果一些查询使用范围运算符,则应选择 B 树索引用于MEMORY表。

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

另请参见 hash index。

反引号

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

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

另请参阅 SQL。

备份

从 MySQL 实例复制一些或所有表数据和元数据的过程,以备份。也可以指已复制文件集。这是 DBA 的关键任务。此过程的反向操作是恢复操作。

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

根据备份对正常数据库操作的干扰程度,备份进一步分类为热备份温备份冷备份。(热备份干扰最小,冷备份干扰最大。)

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

基本列

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

另请参阅生成列,存储生成列,虚拟生成列。

beta

软件产品生命周期中的早期阶段,仅供评估使用,通常没有明确的发布号或小于 1 的号码。InnoDB不使用 beta 标识,而更倾向于一个可以延续数个点发布的早期采用者阶段,最终导致GA发布。

另请参阅早期采用者,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 表中的行和列。处理 BLOB 在 MySQL 应用程序中的技术因每个连接器API而异。MySQL Connector/ODBCBLOB值定义为LONGVARBINARY。对于大型的自由形式字符数据集合,行业术语是CLOB,由 MySQL TEXT数据类型表示。

另请参见 API, CLOB, 连接器, Connector/ODBC。

瓶颈

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

参见缓冲池,并发性。

弹跳

立即跟随重启的关闭操作。理想情况下,具有相对较短的热身期,以便性能和吞吐量迅速恢复到高水平。

参见关闭。

伙伴分配器

用于管理 InnoDB 缓冲池中不同大小的机制。

参见缓冲池,页,页大小。

缓冲区

用于临时存储的内存或磁盘区域。数据在内存中进行缓冲,以便可以通过少量大型 I/O 操作而不是许多小型操作有效地写入磁盘。数据在磁盘上进行缓冲以提高可靠性,即使在最糟糕的时刻发生崩溃或其他故障时,也可以恢复数据。InnoDB 使用的主要缓冲区类型包括缓冲池双写缓冲区变更缓冲区

参见缓冲池,变更缓冲区,崩溃,双写缓冲区。

缓冲池

用于同时缓存表和索引的InnoDB数据的内存区域。为了提高高容量读操作的效率,缓冲池被划分为,每个页可以潜在地容纳多行数据。为了提高缓存管理的效率,缓冲池被实现为页的链表;很少使用的数据会根据LRU算法的变体从缓存中淘汰。在具有大内存的系统上,可以通过将缓冲池划分为多个缓冲池实例来提高并发性。

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

参见缓冲池实例、LRU、页、预热。

缓冲池实例

缓冲池可以被划分为多个区域,由innodb_buffer_pool_instances配置选项控制。由innodb_buffer_pool_size指定的总内存大小被分配给所有缓冲池实例。通常,对于将多个千兆字节分配给InnoDB缓冲池的系统来说,拥有多个缓冲池实例是合适的,每个实例为一千兆字节或更大。对于从许多并发会话中的缓冲池加载或查找大量数据的系统,拥有多个缓冲池实例可以减少对管理缓冲池的数据结构的独占访问的争夺。

参见缓冲池。

内置

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

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

C

一种将可移植性与性能和访问低级硬件特性相结合的编程语言,使其成为编写操作系统、驱动程序和其他类型的系统软件的热门选择。许多复杂的应用程序、语言和可重用模块都包含用 C 编写的部分,与用其他语言编写的高级组件结合在一起。其核心语法对C++JavaC#开发人员来说很熟悉。

参见 C API, C++, C#, Java.

C API

C API 代码随 MySQL 分发。它包含在libmysqlclient库中,使C程序能够访问数据库。

参见 API, C, libmysqlclient.

C#

一种结合强类型和面向对象特性的编程语言,运行在微软.NET框架或其开源对应物Mono中。常用于创建使用ASP.net框架的应用程序。其语法对CC++Java开发人员来说很熟悉。

参见 .NET, ASP.net, C, Connector/NET, C++, Java, Mono.

C++

一种核心语法对C开发人员很熟悉的编程语言。提供访问低级操作以实现性能,结合高级数据类型、面向对象特性和垃圾回收。要为 MySQL 编写 C++ 应用程序,您需要使用Connector/C++组件。

参见 C, Connector/C++.

缓存

用于存储数据副本以便频繁或高速检索的任何内存区域的通用术语。在InnoDB中,主要的缓存结构是缓冲池

参见 缓冲区, 缓冲池.

基数

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

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

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

参见 column, composite index, index, index hint, persistent statistics, random dive, selectivity, unique constraint。

变更缓冲区

记录辅助索引页面更改的特殊数据结构。这些值可能来自 SQL INSERTUPDATEDELETE语句(DML)。涉及变更缓冲区的一组功能被统称为变更缓冲,包括插入缓冲删除缓冲清除缓冲

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

从物理上看,变更缓冲区是系统表空间的一部分,因此索引更改在数据库重新启动时仍保持缓冲。只有当页面由于某些其他读取操作而被带入缓冲池时,这些更改才会被应用(合并)。

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

以前称为插入缓冲

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

更改缓冲

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

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

校验点

当对缓存在缓冲池中的数据页进行更改时,这些更改稍后会被写入数据文件,这个过程称为刷新。校验点是最新更改的记录(由LSN值表示),已成功写入数据文件。

另请参阅缓冲池、数据文件、刷新、模糊校验点、LSN。

校验码

InnoDB中,当从磁盘读取表空间中的InnoDB 缓冲池时,用于检测损坏的验证机制。此功能由 MySQL 5.5 中的innodb_checksums配置选项控制。innodb_checksums在 MySQL 5.6.3 中已被弃用,由innodb_checksum_algorithm取代。

innochecksum命令通过在 MySQL 服务器关闭时测试指定表空间文件的校验值来帮助诊断损坏问题。

MySQL 还为复制目的使用校验和。有关详细信息,请参阅配置选项binlog_checksumsource_verify_checksummaster_verify_checksum,以及replica_sql_verify_checksumslave_sql_verify_checksum

另请参见缓冲池,页,表空间。

子表

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

另请参见外键,父表。

清洁页

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

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

干净关闭

一个在完成所有更改到InnoDB表之前无错误地完成并应用所有更改的关闭,与崩溃快速关闭相对。慢关闭的同义词。

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

客户端

一个在数据库服务器外部运行的程序,通过连接器或通过客户端库提供的API向数据库发送请求进行通信。它可以在与数据库服务器相同的物理机器上运行,也可以在通过网络连接的远程机器上运行。它可以是一个专用数据库应用程序,也可以是像mysql命令行处理器这样的通用程序。

参见 API,客户端库,连接器,mysql,服务器。

客户端库

包含用于处理数据库的函数集合的文件。通过使用这些库编译您的程序,或在与您的应用程序相同的系统上安装它们,您可以在没有安装 MySQL 服务器的机器上运行一个数据库应用程序(称为客户端);应用程序通过网络访问数据库。使用 MySQL,您可以使用来自 MySQL 服务器的libmysqlclient库。

参见客户端,libmysqlclient。

客户端端准备语句

一种准备语句类型,其中缓存和重用在本地管理,模拟服务器端准备语句的功能。历史上,一些Connector/JConnector/ODBCConnector/PHP开发人员使用这种方法来解决与服务器端存储过程相关的问题。对于现代 MySQL 服务器版本,建议使用服务器端准备语句以获得更好的性能、可伸缩性和内存效率。

参见 Connector/J,Connector/ODBC,Connector/PHP,准备语句。

CLOB

一种 SQL 数据类型(TINYTEXT, TEXT, MEDIUMTEXT, 或 LONGTEXT)用于存储任意大小的包含任何类型字符数据的对象。用于存储基于文本的文档,带有相关字符集和排序规则。处理 MySQL 应用程序中的 CLOB 的技术因每个连接器API而异。MySQL Connector/ODBC 将TEXT值定义为LONGVARCHAR。用于存储二进制数据的等效类型是BLOB类型。

参见 API,BLOB,连接器,Connector/ODBC。

聚集索引

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

在 Oracle 数据库产品中,这种类型的表被称为索引组织表

参见索引,主键,次要索引。

冷备份

在数据库关闭时进行的备份。对于繁忙的应用程序和网站,这可能不太实际,您可能更喜欢温备份热备份

查看 备份, 热备份, 温备份。

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

每个列都有一个基数值。一个列可以是其表的主键,或者是主键的一部分。一个列可以受到唯一约束非空约束或两者的约束。不同列中的值,甚至跨不同表,可以通过外键关系连接。

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

查看 基数, 外键, 索引, 非空约束, 主键, 行, 表, 唯一约束。

列索引

单列上的索引

查看 复合索引, 索引。

列前缀

当创建带有长度规范的索引时,例如 CREATE INDEX idx ON t1 (c1(N)),只有列值的前 N 个字符存储在索引中。保持索引前缀较小使索引紧凑,内存和磁盘 I/O 节省有助于性能。 (尽管使索引前缀过小可能会通过使具有不同值的行在查询优化器看起来是重复的来阻碍查询优化。)

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

查看 索引。

命令拦截器

语句拦截器的同义词。适用于Connector/NETConnector/J的拦截器设计模式的一个方面。Connector/NET 称之为命令,Connector/J 称之为语句。与异常拦截器形成对比。

查看 Connector/J, Connector/NET, 异常拦截器, 拦截器, 语句拦截器。

提交

一个结束事务SQL语句,使事务所做的任何更改永久化。它是回滚的反义词,后者会撤消事务中所做的任何更改。

InnoDB 使用一种乐观机制进行提交,这样在提交实际发生之前就可以将更改写入数据文件。这种技术使得提交本身更快,但在回滚时需要更多工作。

默认情况下,MySQL 使用自动提交设置,这意味着每个 SQL 语句后会自动执行提交。

另请参阅 autocommit、optimistic、rollback、SQL、transaction。

紧凑行格式

用于 InnoDB 表的一种行格式。从 MySQL 5.0.3 到 MySQL 5.7.8,默认行格式为紧凑行格式。在 MySQL 8.0 中,默认行格式由innodb_default_row_format配置选项定义,其默认设置为DYNAMICCOMPACT行格式为 null 和可变长度列提供了比REDUNDANT行格式更紧凑的表示。

有关InnoDB COMPACT行格式的更多信息,请参阅第 17.10 节,“InnoDB 行格式”。

另请参阅 dynamic row format、file format、redundant row format、row format。

复合索引

包含多列的索引

另请参阅 index。

压缩备份

MySQL Enterprise Backup产品的压缩功能会对每个表空间进行压缩备份,将扩展名从.ibd更改为.ibz。压缩备份数据可以让您保留更多备份,并减少将备份传输到不同服务器的时间。在恢复操作期间,数据会被解压缩。当压缩备份操作处理已经压缩的表时,会跳过该表的压缩步骤,因为再次压缩将几乎不会节省空间。

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

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

另请参阅 apply、binary log、compression、hot backup、MySQL Enterprise Backup、tablespace。

压缩行格式

一种行格式,可以为InnoDB表启用数据和索引压缩。大字段存储在页面之外,这些页面包含其余的行数据,就像动态行格式一样。索引页面和大字段都经过压缩,节省了内存和磁盘空间。根据数据结构的不同,内存和磁盘使用量的减少可能会或可能不会超过解压数据时的性能开销。有关使用详细信息,请参见第 17.9 节,“InnoDB 表和页面压缩”。

有关InnoDBCOMPRESSED行格式的其他信息,请参见 DYNAMIC 行格式。

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

压缩表

数据以压缩形式存储的表。对于InnoDB,这是使用ROW_FORMAT=COMPRESSED创建的表。有关更多信息,请参见第 17.9 节,“InnoDB 表和页面压缩”。

另请参见压缩行格式,压缩。

压缩

一项具有广泛好处的功能,可以减少磁盘空间使用、减少 I/O 操作,以及减少用于缓存的内存。

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

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

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

压缩失败

实际上并不是错误,而是在使用压缩DML操作结合时可能发生的昂贵操作。当更新压缩的的内容超出了用于记录修改的区域时,会发生这种情况;然后再次对页面进行压缩,将所有更改应用于表数据;重新压缩的数据无法适应原始页面,需要 MySQL 将数据拆分为两个新页面,并分别对每个页面进行压缩。要检查此条件发生的频率,请查询INFORMATION_SCHEMA.INNODB_CMP表,并检查COMPRESS_OPS列的值超过COMPRESS_OPS_OK列的值的情况。理想情况下,压缩失败不应经常发生;如果发生了,您可以调整innodb_compression_levelinnodb_compression_failure_threshold_pctinnodb_compression_pad_pct_max配置选项。

另请参见 compression、DML、page。

连接索引

请参见 composite index。

并发性

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

另请参见 ACID、locking、transaction。

配置文件

在启动时由 MySQL 使用的保存选项值的文件。传统上,在 Linux 和 Unix 上,该文件名为my.cnf,在 Windows 上为my.ini。您可以在文件的[mysqld]部分设置与 InnoDB 相关的许多选项。

有关 MySQL 搜索配置文件的信息,请参见 Section 6.2.2.2, “Using Option Files”。

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

另请参阅 my.cnf,MySQL 企业备份,选项,选项文件。

连接

应用程序与 MySQL 服务器之间的通信通道。数据库应用程序的性能和可伸缩性受到数据库连接建立速度、同时建立连接数量以及连接持续时间的影响。在Connector/NET中,诸如主机端口等参数被表示为连接字符串,而在Connector/ODBC中被表示为DSN。高流量系统利用一种称为连接池的优化。

另请参阅连接池,连接字符串,Connector/NET,Connector/ODBC,DSN,主机,端口。

连接池

一个缓存区域,允许数据库连接在同一应用程序内或跨不同应用程序中被重复使用,而不是为每个数据库操作建立和拆除新连接。这种技术在J2EE应用服务器中很常见。使用Connector/JJava应用程序可以使用Tomcat和其他应用服务器的连接池功能。重用对应用程序是透明的;应用程序仍然像往常一样打开和关闭连接。

另请参阅连接,Connector/J,J2EE,Tomcat。

连接字符串

数据库连接参数的表示,编码为字符串文字,以便在程序代码中使用。字符串的各部分代表连接参数,如主机端口。连接字符串包含多个键值对,用分号分隔。每个键值对用等号连接。经常与Connector/NET应用程序一起使用;有关详细信息,请参阅创建 Connector/NET 连接字符串。

另请参阅连接,Connector/NET,主机,端口。

连接器

MySQL 连接器为客户端程序提供与 MySQL 服务器的连接。几种编程语言和框架都有各自关联的连接器。与API提供的较低级别访问形成对比。

另请参阅 API,客户端,连接器/C++,Connector/J,Connector/NET,Connector/ODBC。

连接器/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++ 8.3 开发人员指南。

参见 客户端, 连接器, JDBC。

Connector/J

为使用 Java 编程语言开发的 客户端应用程序提供连接的 JDBC 驱动程序。MySQL Connector/J 是一个 JDBC 类型 4 驱动程序:它是 MySQL 协议的纯 Java 实现,不依赖于 MySQL 客户端库。有关详细信息,请参见 MySQL Connector/J 8.0 开发人员指南。

参见 客户端, 客户端库, 连接器, Java, JDBC。

Connector/NET

为使用诸如 C#.NETMonoVisual StudioASP.netADO.net 等语言、技术和框架编写应用程序的开发人员提供的 MySQL 连接器

参见 ADO.NET, ASP.net, 连接器, C#, Mono, Visual Studio。

Connector/ODBC

提供使用行业标准开放数据库连接 (ODBC) API 访问 MySQL 数据库的 MySQL ODBC 驱动程序系列。以前称为 MyODBC 驱动程序。有关详细信息,请参见 MySQL Connector/ODBC 开发人员指南。

参见 连接器, ODBC。

Connector/PHP

为 Windows 操作系统优化的 PHP 中的 mysqlmysqli API 版本。

参见 连接器, PHP, PHP API。

一致性读取

一种读取操作,利用快照信息根据某一时间点呈现查询结果,不受同时运行的其他事务所做更改的影响。如果查询的数据已被另一个事务更改,原始数据将根据撤销日志的内容重建。这种技术避免了一些可能降低并发性锁定问题,因为它强制事务等待其他事务完成。

使用可重复读 隔离级别时,快照是基于执行第一次读取操作时的时间。使用读提交隔离级别时,快照将重置为每次一致性读取操作的时间。

一致读取是InnoDB读提交可重复读隔离级别中处理SELECT语句的默认模式。由于一致读取不在访问的表上设置任何锁,其他会话可以在对表执行一致读取时自由修改这些表。

有关适用隔离级别的技术细节,请参阅第 17.7.2.3 节,“一致的非锁定读取”。

参见并发性,隔离级别,锁定,读提交,可重复读,快照,事务,撤销日志。

约束

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

参见 ACID,外键,唯一约束。

计数器

由特定类型的InnoDB操作递增的值。用于衡量服务器的繁忙程度,排查性能问题的来源,并测试更改(例如配置设置或查询使用的索引)是否具有期望的低级影响。通过性能模式表和INFORMATION_SCHEMA表,可以获得不同类型的计数器,特别是INFORMATION_SCHEMA.INNODB_METRICS

参见 INFORMATION_SCHEMA,度量计数器,性能模式。

覆盖索引

一个索引包括查询检索的所有列。查询不再使用索引值作为指针来查找完整的表行,而是从索引结构返回值,节省磁盘 I/O。InnoDB可以对比MyISAM更多的索引应用这种优化技术,因为InnoDB次要索引也包括主键列。在事务修改的表上,InnoDB无法在事务结束之前对查询应用这种技术。

任何列索引复合索引都可以作为覆盖索引,只要查询正确。设计您的索引和查询以尽可能利用这种优化技术。

参见 列索引, 复合索引, 索引, 主键, 次要索引。

CPU 绑定

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

参见 瓶颈, 缓冲池, 工作负载。

崩溃

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

参见 崩溃恢复, 快速关闭, InnoDB, 关闭。

崩溃恢复

MySQL 在崩溃后重新启动时发生的清理活动。对于InnoDB表,使用重做日志中的数据重放不完整事务的更改。在崩溃前已提交但尚未写入数据文件的更改将从双写缓冲区中重建。当数据库正常关闭时,此类活动将在关闭期间通过清除操作执行。

在正常操作期间,已提交的数据可以在更改缓冲区中存储一段时间,然后再写入数据文件。始终存在着在保持数据文件最新的状态之间进行权衡,这会在正常操作期间引入性能开销,并在关闭和崩溃恢复时缓冲数据,这可能会使关闭和崩溃恢复时间变长。

参见 更改缓冲区, 提交, 崩溃, 数据文件, 双写缓冲区, InnoDB, 清除, 重做日志。

CRUD

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

参见 DDL, DML, 查询, SQL。

光标

代表 SQL 语句结果集的内部 MySQL 数据结构。通常与预处理语句动态 SQL一起使用。它在其他高级语言中类似于迭代器,按需生成结果集中的每个值。

虽然 SQL 通常会为您处理游标的处理,但在处理性能关键代码时,您可能需要深入了解内部工作原理。

另请参阅 动态 SQL,预处理语句,查询。

D

数据定义语言

参见 DDL。

数据字典

元数据用于跟踪数据库对象,如索引和表。对于 MySQL 数据字典(在 MySQL 8.0 中引入),元数据物理上位于 mysql 数据库目录中的 InnoDB 每表一个文件表空间文件中。对于 InnoDB 数据字典,元数据物理上位于 InnoDB 系统表空间中。

因为 MySQL Enterprise Backup 产品始终备份 InnoDB 系统表空间,所以所有备份都包括 InnoDB 数据字典的内容。

另请参阅 列,每表一个文件,.frm 文件,索引,MySQL Enterprise Backup,系统表空间,表。

数据目录

每个 MySQL 实例下的目录中保存着 InnoDB数据文件和代表各个数据库的目录。由 datadir 配置选项控制。

另请参阅 数据文件,实例。

数据文件

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

InnoDB 系统表空间保存着 InnoDB 数据字典,能够存储多个 InnoDB 表的数据,由一个或多个 .ibdata 数据文件表示。

每个 InnoDB 表的数据都存储在一个 .ibd 数据文件中,代表着每表一个文件表空间。

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

另请参阅 数据字典,每表一个文件,通用表空间,.ibd 文件,ibdata 文件,索引,系统表空间,表,表空间。

数据操作语言

参见 DML。

数据仓库

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

另请参阅去规范化,OLTP,查询,只读事务。

数据库

在 MySQL 的数据目录中,每个数据库都由一个单独的目录表示。InnoDB 的系统表空间可以容纳来自 MySQL 实例内多个数据库的表数据,保存在位于单个数据库目录之外的数据文件中。当启用每表一个文件模式时,代表单个 InnoDB 表的.ibd 文件存储在数据库目录内,除非使用DATA DIRECTORY子句在其他位置创建。在 MySQL 5.7.6 中引入的通用表空间也使用.ibd 文件保存表数据。与每表一个文件的.ibd 文件不同,通用表空间的.ibd 文件可以保存来自 MySQL 实例内多个数据库的表数据,并且可以分配给相对于 MySQL 数据目录或独立于 MySQL 数据目录的目录。

对于长期使用 MySQL 的用户,数据库是一个熟悉的概念。来自 Oracle Database 背景的用户可能会发现 MySQL 对数据库的定义更接近于 Oracle Database 所称的模式

另请参阅数据文件,每表一个文件,.ibd 文件,实例,模式,系统表空间。

DCL

数据控制语言,一组管理权限的SQL语句。在 MySQL 中,包括GRANTREVOKE语句。与DDLDML相对比。

另请参阅 DDL,DML,SQL。

DDEX 提供程序

一项功能,允许您在Visual Studio中使用数据设计工具来操作 MySQL 数据库中的模式和对象。对于使用Connector/NET的 MySQL 应用程序,MySQL Visual Studio 插件充当 MySQL 5.0 及更高版本的 DDEX 提供程序。

另请参阅 Visual Studio。

DDL

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

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

InnoDB的在线 DDL 功能提升了CREATE INDEXDROP INDEX以及多种ALTER TABLE操作的性能。更多信息请参见第 17.12 节,“InnoDB 和在线 DDL”。此外,InnoDB的每表一个文件设置可能会影响DROP TABLETRUNCATE TABLE操作的行为。

DMLDCL相对比。

参见 提交, DCL, DML, 每表一个文件, 回滚, SQL, 事务。

死锁

不同事务由于互相持有对方需要的而无法继续进行的情况。因为两个事务都在等待资源可用,所以它们都不会释放自己持有的锁。

当事务以相反的顺序锁定多个表中的行(通过UPDATESELECT ... FOR UPDATE等语句)时,可能会发生死锁。当这些语句锁定索引记录和间隙的范围时,也可能会发生死锁,因为每个事务由于时间问题而获取了一些锁但没有获取其他锁。

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

参见 间隙, 锁, 事务。

死锁检测

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

参见 死锁, 回滚, 事务, 受害者。

删除

InnoDB处理DELETE语句时,行立即标记为删除,并不再被查询返回。存储在稍后的时间内回收,即所谓的清理操作。用于删除大量数据的相关操作及其自身的性能特征是TRUNCATEDROP

另请参见 drop,purge,truncate。

删除缓冲

将由DELETE操作导致的次要索引页的更改存储在更改缓冲区中,而不是立即写入更改,以便执行物理写入以最小化随机 I/O。(因为删除操作是一个两步过程,此操作缓冲了通常标记索引记录为删除的写入。)这是更改缓冲的一种类型;其他类型包括插入缓冲清理缓冲

另请参见更改缓冲区,更改缓冲,插入缓冲区,插入缓冲,清理缓冲。

非规范化

一种数据存储策略,将数据复制到不同的表中,而不是使用外键连接查询将表链接起来。通常用于数据仓库应用程序,其中数据在加载后不会更新。在这类应用程序中,查询性能比在更新期间保持一致数据更为重要。与规范化相对。

另请参见 data warehouse,外键,连接,规范化。

降序索引

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

另请参见 index。

字典对象缓存

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

欲了解更多信息,请参阅第 16.4 节,“字典对象缓存”。

另请参见数据字典,LRU。

脏页

一个在InnoDB 缓冲池中已经在内存中更新的脏页,其中的更改尚未被写入(刷新)到数据文件中。与干净页相反。

另请参见缓冲池,干净页,数据文件,刷新,页。

脏读取

一种检索不可靠数据的操作,即被另一个事务更新但尚未提交的数据。只有在已知为读未提交隔离级别下才可能。

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

其相反是一致性读取,其中InnoDB确保事务不会读取另一个事务更新的信息,即使另一个事务在此期间提交。

参见 ACID,commit,consistent read,isolation level,READ UNCOMMITTED,rollback。

基于磁盘的

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

参见 adaptive hash index,buffer pool,in-memory database。

磁盘密集型

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

参见 bottleneck,buffer pool,workload。

DML

数据操作语言,用于执行INSERTUPDATEDELETE操作的一组SQL语句。SELECT语句有时被视为 DML 语句,因为SELECT ... FOR UPDATE形式受到与INSERTUPDATEDELETE相同的锁定考虑。

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

对比DDLDCL

另请参阅 commit, DCL, DDL, locking, rollback, SQL, transaction.

文档标识符

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

另请参阅 全文搜索, FULLTEXT index, ilist.

双写缓冲区

InnoDB 使用一种名为双写(doublewrite)的文件刷新技术。在将页面写入数据文件之前,InnoDB 首先将它们写入一个称为双写缓冲区的存储区域。只有在写入和刷新到双写缓冲区完成后,InnoDB 才将页面写入数据文件的正确位置。如果在页面写入过程中发生操作系统、存储子系统或mysqld 进程崩溃,InnoDB 可以在崩溃恢复期间从双写缓冲区找到页面的一个良好副本。

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

另请参阅 crash recovery, data files, page, purge.

删除

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

另请参阅 buffer pool, data dictionary, DDL, table, truncate.

DSN

“数据库源名称”的缩写。它是Connector/ODBC连接信息的编码。有关详细信息,请参阅在 Windows 上配置 Connector/ODBC DSN。它相当于Connector/NET使用的连接字符串

参见连接,连接字符串,Connector/NET,Connector/ODBC。

动态游标

ODBC支持的一种游标类型,当再次读取行时可以获取新的和更改的结果。更改对游标的可见性及其快速程度取决于所涉及的表类型(事务或非事务)以及事务表的隔离级别。必须显式启用对动态游标的支持。

参见游标,ODBC。

动态行格式

一种InnoDB行格式。由于长变长列值存储在保存行数据的页面之外,因此对包含大对象的行非常高效。由于通常不会访问大字段以评估查询条件,因此它们不会像常规情况下那样经常进入缓冲池,从而减少 I/O 操作并更好地利用缓存内存。

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

有关InnoDB DYNAMIC行格式的更多信息,请参见 DYNAMIC 行格式。

参见缓冲池,文件格式,行格式。

动态 SQL

一种功能,允许您使用更强大、安全和高效的方法创建和执行prepared statements,以替代将语句部分连接成字符串变量的天真技术。

参见 prepared statement。

动态语句

通过动态 SQL创建和执行的prepared statement

参见 dynamic SQL,prepared statement。

E

早期采用者

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

参见 beta。

艾菲尔

包含许多面向对象特性的编程语言。其中一些概念对JavaC#开发人员来说很熟悉。有关 MySQL 的开源 Eiffel API,请参见第 31.13 节,“MySQL Eiffel Wrapper”。

参见 API,C#,Java。

嵌入式

嵌入式 MySQL 服务器库(libmysqld)使得在客户端应用程序内部运行一个功能齐全的 MySQL 服务器成为可能。主要优点是增加了嵌入式应用程序的速度和更简单的管理。

参见客户端,libmysqld。

错误日志

一种显示有关 MySQL 启动和关键运行时错误以及崩溃信息的日志类型。有关详细信息,请参阅 Section 7.4.2,“错误日志”。

参见崩溃,日志。

驱逐

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

参见缓冲池,脏页,刷新,LRU,相邻页。

异常拦截器

一种用于跟踪、调试或增强数据库应用程序遇到的 SQL 错误的拦截器。例如,拦截器代码可以发出SHOW WARNINGS语句以检索额外信息,并添加描述性文本,甚至更改返回给应用程序的异常类型。由于拦截器代码仅在 SQL 语句返回错误时调用,因此在正常(无错误)操作期间不会对应用程序施加任何性能损失。

在使用Connector/JJava应用程序中,设置这种类型的拦截器涉及实现com.mysql.jdbc.ExceptionInterceptor接口,并向连接字符串添加exceptionInterceptors属性。

在使用Connector/NETVisual Studio应用程序中,设置这种类型的拦截器涉及定义一个从BaseExceptionInterceptor类继承的类,并将该类名指定为连接字符串的一部分。

参见 Connector/J,Connector/NET,拦截器,Java,Visual Studio。

独占锁

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

参见并发性,一致性读,隔离级别,锁,可重复读,共享锁,事务。

区段

一组在一个表空间内。对于默认的页大小为 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功能,如预读请求和双写缓冲区使用一次读取、写入、分配或释放数据一个区段。

参见双写缓冲区,页,页大小,预读,段,表空间。

F

.frm 文件

包含 MySQL 表的元数据,如表定义的文件。.frm文件在 MySQL 8.0 中被移除,但仍然在早期的 MySQL 版本中使用。在 MySQL 8.0 中,以前存储在.frm文件中的数据存储在数据字典表中。

参见数据字典,MySQL 企业备份,系统表空间。

故障转移

在发生故障时自动切换到备用服务器的能力。在 MySQL 环境中,故障转移涉及备用数据库服务器。在J2EE环境中通常由应用服务器或框架支持。

参见 Connector/J,J2EE。

快速索引创建

在 InnoDB 插件中首次引入的功能,现在在 MySQL 5.5 及更高版本中,通过避免完全重写相关表来加快InnoDB 次要索引的创建。这种加速也适用于删除次要索引。

由于索引维护可能会给许多数据传输操作增加性能开销,请考虑在没有任何二级索引的情况下执行操作,如 ALTER TABLE ... ENGINE=INNODBINSERT INTO ... SELECT * FROM ...,然后再创建索引。

在 MySQL 5.6 中,这个功能变得更加通用。您可以在创建索引的同时读写表格,并且可以执行许多种 ALTER TABLE 操作,而无需复制表格,也无需阻塞 DML 操作,或两者兼而有之。因此,在 MySQL 5.6 及更高版本中,这组功能被称为 在线 DDL 而不是快速索引创建。

有关相关信息,请参见 Section 17.12, “InnoDB and Online DDL”。

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

快速关闭

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

另请参见 崩溃恢复, 数据文件, 刷新, 关闭, 慢关闭。

文件格式

InnoDB 表的文件格式。

另请参见 每表一个文件, .ibd 文件, ibdata 文件, 行格式。

每表一个文件

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

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

MySQL 企业备份产品对于在自己文件中的表更加灵活。例如,只有在单独的文件中的表才能从备份中排除。因此,此设置适用于备份频率较低或按不同时间表备份的表。

参见压缩行格式,压缩,文件格式,.ibd 文件,ibdata 文件,innodb_file_per_table,MySQL 企业备份,行格式,系统表空间。

填充因子

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=FIXEDInnoDB将返回错误。

参见紧凑行格式,行格式。

刷新

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

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

另请参阅缓冲池,提交,模糊检查点,重做日志,慢关闭,撤销日志。

刷新列表

一个内部InnoDB数据结构,用于跟踪脏页缓冲池中的情况:即已经被更改并需要写回磁盘的。这个数据结构经常被InnoDB内部的小事务更新,因此受到自己的互斥锁保护,以允许并发访问缓冲池。

另请参阅缓冲池,脏页,LRU,小事务,互斥锁,页,页清理器。

外键

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

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

设计规范化数据库的一个阶段是识别重复的数据,将这些数据分离到一个新表中,并建立外键关系,以便多个表可以像单个表一样查询,使用连接操作。

另请参阅子表,外键约束,连接,规范化,NULL,父表,引用完整性,关系型。

外键约束

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

参见子表,约束,DML,外键,NULL。

FTS

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

参见全表扫描,全文搜索。

全备份

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

参见备份,数据库,实例,部分备份,表。

全表扫描

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

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

参见缓冲池,索引。

全文搜索

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

参见全文索引。

全文索引

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

参见 全文搜索,索引,InnoDB,搜索索引,停用词。

模糊检查点

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

参见 缓冲池,脏页,刷新。

G

GA

“一般可用”,软件产品离开测试版并可供销售、官方支持和生产使用的阶段。

参见 测试版。

GAC

“全局程序集缓存”(Global Assembly Cache)的缩写。在 .NET 系统中存储库(程序集)的中心区域。在物理上由嵌套文件夹组成,在 .NET CLR 中被视为单个虚拟文件夹。

参见 .NET,程序集。

间隙

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 属性。

参见 ACID,事务,XA。

组提交

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

参见二进制日志,提交。

全局唯一标识符

“全局唯一标识符”的缩写,一种可以用于跨不同数据库、语言、操作系统等关联数据的 ID 值。(作为使用顺序整数的替代方案,其中相同的值可能出现在不同表、数据库等中,引用不同数据。)较旧的 MySQL 版本将其表示为BINARY(16)。目前,它表示为CHAR(36)。MySQL 有一个UUID()函数,返回字符格式的 GUID 值,以及一个UUID_SHORT()函数,返回整数格式的 GUID 值。由于连续的 GUID 值不一定按升序排序,因此对于大型 InnoDB 表来说,它不是一个有效的主键值使用。

H

哈希索引

一种用于使用相等运算符而不是大于或BETWEEN范围运算符的查询的索引类型。适用于MEMORY表。尽管出于历史原因哈希索引是MEMORY表的默认选择,该存储引擎也支持B 树索引,对于通用查询而言通常是更好的选择。

MySQL 包括这种索引类型的变体,即自适应哈希索引,根据运行时条件自动为InnoDB表构建。

参见自适应哈希索引,B 树,索引,InnoDB。

硬盘驱动器

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

参见基于磁盘,SSD。

心跳

定期发送的消息,用于指示系统正常运行。在复制环境中,如果停止发送此类消息,其中一个副本可以接替其位置。类似的技术可以在集群环境中的服务器之间使用,以确认它们都正常运行。

参见复制,源。

高水位标记

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

参见低水位标记。

历史记录列表

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

也称为清除延迟

参见 DML,刷新,清除,清除延迟,回滚段,事务,撤销日志。

空洞打孔

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

参见稀疏文件,透明页压缩。

主机

数据库服务器的网络名称,用于建立连接。通常与端口一起指定。在某些情况下,IP 地址127.0.0.1比特殊名称localhost更适合访问与应用程序在同一服务器上的数据库。

参见连接,本地主机,端口。

一种情况,其中行、表或内部数据结构被频繁访问,需要某种形式的锁定或互斥,导致性能或可伸缩性问题。

尽管“热”通常表示不良条件,热备份是首选的备份类型。

参见热备份。

热备份

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

执行热备份的 Oracle 产品,特别是InnoDB表,还包括来自MyISAM和其他存储引擎的表,被称为MySQL 企业备份

热备份过程包括两个阶段。数据文件的初始复制产生一个原始备份应用步骤将在备份运行时发生的数据库更改合并进来。应用更改会产生一个准备好的备份;这些文件随时可以在需要时进行恢复。

另请参阅应用,MySQL 企业备份,准备好的备份,原始备份。

I

.ibd 文件

按表分文件表空间和通用表空间的数据文件。按表分文件表空间.ibd文件包含单个表和相关索引数据。通用表空间.ibd文件可能包含多个表的表和索引数据。

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

如果使用DATA DIRECTORY =子句创建了一个按表分文件表空间或通用表空间,则.ibd文件位于指定路径,而不在正常数据目录之内。

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

另请参阅数据库,按表分文件,通用表空间,ibdata 文件,.ibz 文件,innodb_file_per_table,MySQL 企业备份,系统表空间。

.ibz 文件

MySQL 企业备份产品执行压缩备份时,它会将使用按表分文件设置创建的每个表空间文件从.ibd扩展名转换为.ibz扩展名。

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

参见压缩备份,压缩行格式,每表一个文件,.ibd 文件,MySQL 企业备份,表空间。

I/O 绑定

参见磁盘绑定。

ib 文件集

在 MySQL 数据库中由InnoDB管理的一组文件:系统表空间每表一个文件表空间文件和重做日志文件。根据 MySQL 版本和InnoDB配置,还可能包括通用表空间临时表空间撤销表空间文件。这个术语有时在详细讨论InnoDB文件结构和格式时用来指代 MySQL 数据库中由InnoDB管理的文件集。

参见数据库,每表一个文件,通用表空间,重做日志,系统表空间,临时表空间,撤销表空间。

ibbackup_logfile

MySQL 企业备份产品在热备份操作期间创建的一个补充备份文件。它包含备份运行时发生的任何数据更改的信息。初始备份文件,包括ibbackup_logfile,被称为原始备份,因为备份操作期间发生的更改尚未合并。在对原始备份文件执行应用步骤后,生成的文件确实包含那些最终数据更改,并被称为准备备份。在这个阶段,ibbackup_logfile文件不再需要。

参见应用,热备份,MySQL 企业备份,准备备份,原始备份。

ibdata 文件

一组文件,如ibdata1ibdata2等,组成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_logfile0ib_logfile1,构成重做日志。有时也称为日志组。这些文件记录尝试更改InnoDB表中数据的语句。这些语句在启动时自动重放,以纠正不完整事务写入的数据。

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

参见 二进制日志,日志组,重做日志。

ilist

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

参见 全文索引。

隐式行锁

InnoDB获取的用于确保一致性的行锁,无需您明确请求。

参见 行锁。

内存数据库

一种在内存中维护数据的数据库系统,以避免由于磁盘 I/O 和磁盘块与内存区域之间的转换而产生的开销。一些内存数据库牺牲了持久性(ACID设计哲学中的“D”),容易受到硬件、电源和其他类型的故障影响,使其更适合只读操作。其他内存数据库确实使用了诸如记录更改到磁盘或使用非易失性内存等持久性机制。

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

另请参阅 ACID、自适应哈希索引、缓冲池、基于磁盘、只读事务。

增量备份

一种热备份类型,由MySQL 企业备份产品执行,仅保存自某个时间点以来更改的数据。拥有完整备份和一系列增量备份可以让您在长时间内重建备份数据,而不需要保留多个完整备份的存储开销。您可以恢复完整备份,然后依次应用每个增量备份,或者您可以通过将每个增量备份应用到完整备份中来保持完整备份最新,然后执行单个恢复操作。

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

另请参阅热备份、MySQL 企业备份、页。

索引

一种数据结构,为提供快速查找能力,通常通过形成代表特定或一组列的所有值的树结构(B 树)来实现。

InnoDB表始终具有代表主键聚集索引。它们还可以在一个或多个列上定义一个或多个辅助索引。根据它们的结构,辅助索引可以分类为部分复合索引。

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

尽管 B 树索引是最常见的,但不同类型的数据结构用于哈希索引,如MEMORY存储引擎和InnoDB自适应哈希索引R 树索引用于多维信息的空间索引。

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

索引缓存

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

参见全文搜索,全文索引。

索引条件推送

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

参见索引,存储引擎。

索引提示

用于覆盖优化器推荐的索引的扩展 SQL 语法。例如,FORCE INDEXUSE INDEXIGNORE INDEX子句。通常在索引列具有分布不均匀的值时使用,导致基数估计不准确。

参见基数,索引。

索引前缀

在适用于多列的索引(称为复合索引)中,索引的初始或领先列。查询引用复合索引的第 1、2、3 等列的查询可以使用索引,即使查询没有引用索引中的所有列。

参见复合索引,索引。

索引统计

参见统计信息。

最小记录

索引中的伪记录,表示该索引中最小值下方的间隙。如果一个事务有类似SELECT ... FROM ... WHERE col < 10 FOR UPDATE;的语句,并且列中的最小值为 5,则它是对最小记录的锁,阻止其他事务插入更小的值,如 0、-10 等。

参见间隙,索引,伪记录,最大记录。

INFORMATION_SCHEMA

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

INFORMATION_SCHEMA数据库还包含特定于InnoDB的表,提供对InnoDB数据字典的查询接口。您使用这些表不是为了查看数据库的结构,而是为了获取有关InnoDB表运作情况的实时信息,以帮助性能监控、调整和故障排除。

参见数据字典,数据库,InnoDB。

InnoDB

一个 MySQL 组件,结合了高性能和事务能力,以确保可靠性、健壮性和并发访问。它体现了ACID设计理念。作为一个存储引擎;它处理使用ENGINE=INNODB子句创建或更改的表。有关架构细节和管理程序,请参阅第十七章,“InnoDB 存储引擎”,以及第 10.5 节,“优化 InnoDB 表”以获取性能建议。

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

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

参见 ACID,热备份,MySQL 企业备份,存储引擎,事务。

innodb_autoinc_lock_mode

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

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

另请参阅自增,自增锁定,混合模式插入,主键。

innodb_file_per_table

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

这个选项影响了许多 SQL 语句的性能和存储考虑,比如DROP TABLETRUNCATE TABLE等。

启用innodb_file_per_table选项可以利用MySQL 企业备份中的表压缩和命名表备份等功能。

欲了解更多信息,请参阅innodb_file_per_table,以及第 17.6.3.2 节,“每表一个文件表空间”。

另请参见 compression, file-per-table, .ibd file, MySQL Enterprise Backup, system tablespace。

innodb_lock_wait_timeout

innodb_lock_wait_timeout 选项设置等待共享资源可用的平衡,或放弃并处理错误,在应用程序中重试或进行替代处理。回滚任何等待超过指定时间以获取锁的 InnoDB 事务。如果由不同存储引擎控制的多个表的更新导致 死锁,则特别有用;这种死锁不会被自动 检测

另请参见 deadlock, deadlock detection, lock, wait。

innodb_strict_mode

innodb_strict_mode 选项控制 InnoDB 是否在 严格模式 下运行,其中通常作为警告处理的条件会导致错误(并且底层语句失败)。

另请参见 strict mode。

插入

SQL 中的主要DML操作之一。插入操作的性能是数据仓库系统和OLTP系统的关键因素,数据仓库系统会向表中加载数百万行数据,而在许多并发连接可能以任意顺序向同一表插入行的 OLTP 系统中。如果插入性能对你很重要,你应该了解 InnoDB 的功能,比如在 change buffering 中使用的 insert bufferauto-increment 列。

另请参见 auto-increment, change buffering, data warehouse, DML, InnoDB, insert buffer, OLTP, SQL。

插入缓冲

change buffer 的旧名称。在 MySQL 5.5 中,添加了对缓冲次要索引页的更改的支持,用于 DELETEUPDATE 操作。以前,只有由 INSERT 操作引起的更改被缓冲。现在首选术语是 change buffer

另请参见 change buffer, change buffering。

插入缓冲

将由INSERT 操作导致的对二级索引页的更改存储在更改缓冲中,而不是立即写入更改,以便可以执行物理写入以最小化随机 I/O。这是更改缓冲的一种类型;其他类型包括删除缓冲清除缓冲

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

另请参见 更改缓冲, 更改缓冲, 删除缓冲, 插入缓冲, 清除缓冲, 唯一索引。

插入意向锁

INSERT 操作在插入行之前设置的一种间隙锁类型。这种类型的表示插入的意图,以便在多个事务在同一索引间隙插入时,如果它们不在间隙内的相同位置插入,则无需等待彼此。有关更多信息,请参见 Section 17.7.1, “InnoDB Locking”。

另请参见 间隙锁, 锁, 下一个键锁。

实例

一个mysqld 守护程序管理一个代表一个或多个数据库数据目录,其中包含一组。在开发、测试和一些复制场景中,在同一服务器机器上可能有多个实例,每个实例管理自己的数据目录并侦听自己的端口或套接字。如果一个实例运行一个磁盘密集的工作负载,服务器可能仍然有额外的 CPU 和内存容量来运行额外的实例。

另请参见 数据目录, 数据库, 磁盘密集, mysqld, 复制, 服务器, 表。

仪器

在源代码级别进行修改以收集用于调整和调试的性能数据。在 MySQL 中,通过仪器收集的数据通过 SQL 接口暴露,使用 INFORMATION_SCHEMAPERFORMANCE_SCHEMA 数据库。

另请参见 INFORMATION_SCHEMA, Performance Schema。

意向独占锁

参见 意向锁。

意向锁

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

参见 锁定, 锁定模式, 锁定, 事务。

意向共享锁

参见 意向锁。

拦截器

用于检测或调试应用程序某个方面的代码,可以在不重新编译或更改应用程序源代码的情况下启用。

参见 命令拦截器, Connector/J, Connector/NET, 异常拦截器。

内在临时表

优化的内部InnoDB临时表,由优化器使用。

参见 优化器。

倒排索引

一种针对文档检索系统进行优化的数据结构,用于InnoDB 全文搜索的实现。InnoDB 全文索引,作为倒排索引实现,记录了文档中每个单词的位置,而不是表行的位置。一个列值(作为文本字符串存储的文档)在倒排索引中由多个条目表示。

参见 全文搜索, 全文索引, ilist。

IOPS

每秒 I/O 操作的缩写。这是繁忙系统的常见衡量标准,特别是OLTP应用程序。如果这个值接近存储设备可以处理的最大值,应用程序可能会变得磁盘限制,从而限制可伸缩性

参见 磁盘限制, OLTP, 可伸缩性。

隔离级别

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

从最高一致性和保护程度到最低,InnoDB 支持的隔离级别有:SERIALIZABLEREPEATABLE READREAD COMMITTEDREAD UNCOMMITTED

对于InnoDB表,许多用户可以将默认隔离级别(REPEATABLE READ)用于所有操作。专家用户可能会选择READ COMMITTED级别,因为他们在OLTP处理中推动可伸缩性的边界,或者在数据仓库操作中,次要不一致性不会影响大量数据的聚合结果。边缘级别(SERIALIZABLEREAD UNCOMMITTED)会改变处理行为到极大程度,因此很少被使用。

参见 ACID,OLTP,READ COMMITTED,READ UNCOMMITTED,REPEATABLE READ,SERIALIZABLE,transaction。

J

J2EE

Java 平台企业版:Oracle 的企业级 Java 平台。它包括用于企业级 Java 应用程序的 API 和运行时环境。有关详细信息,请参见www.oracle.com/technetwork/java/javaee/overview/index.html。在 MySQL 应用程序中,通常使用Connector/J进行数据库访问,并使用诸如TomcatJBoss之类的应用服务器来处理中间层工作,还可以选择使用Spring等框架。J2EE 堆栈中通常提供的与数据库相关的功能包括连接池故障转移支持。

参见 connection pool,Connector/J,failover,Java,JBoss,Spring,Tomcat。

Java

一种结合高性能、丰富内置功能和数据类型、面向对象机制、广泛标准库以及广泛可重用第三方模块的编程语言。许多框架、应用服务器和其他技术支持企业开发。其语法大部分对CC++开发人员来说很熟悉。要使用 MySQL 编写 Java 应用程序,您需要使用称为Connector/JJDBC驱动程序。

参见 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

参见密钥分发中心。

密钥分发中心

在 Kerberos 中,密钥分发中心包括认证服务器(AS)和票证授予服务器(TGS)。

参见认证服务器,票证授予票证。

密钥库

参见 SSL。

KEY_BLOCK_SIZE

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

对于MyISAM表,KEY_BLOCK_SIZE可选地指定用于索引键块的字节大小。该值被视为提示;如果需要,可以使用不同的大小。为单个索引定义指定的KEY_BLOCK_SIZE值会覆盖表级别的KEY_BLOCK_SIZE值。

参见压缩行格式。

L

InnoDB用于实现其内部内存结构的的轻量级结构,通常持续时间短,以毫秒或微秒计。一个通用术语,包括互斥体(用于独占访问)和读写锁(用于共享访问)。某些闩是InnoDB性能调优的重点。有关闩使用和争用的统计信息可通过性能模式接口获得。

参见锁,锁定,互斥体,性能模式,读写锁。

libmysql

libmysqlclient库的非正式名称。

参见 libmysqlclient。

libmysqlclient

通常链接到用C语言编写的客户端程序中的库文件,命名为libmysqlclient.alibmysqlclient.so,有时非正式地称为libmysqlmysqlclient库。

参见客户端,libmysql,mysqlclient。

libmysqld

这个嵌入式MySQL 服务器库使得在客户端应用程序内运行一个功能齐全的 MySQL 服务器成为可能。主要优点是增加了速度和对嵌入式应用程序的更简单管理。您链接的是libmysqld库而不是libmysqlclient。这三个库之间的 API 是相同的。

参见客户端,嵌入式,libmysql,libmysqlclient。

生命周期拦截器

Connector/J支持的一种拦截器类型。它涉及实现接口com.mysql.jdbc.ConnectionLifecycleInterceptor

参见 Connector/J,拦截器。

列表

InnoDB缓冲池被表示为一组内存的列表。随着新页被访问并进入缓冲池,列表会重新排序,当再次访问缓冲池内的页并被视为较新时,以及长时间未被访问的页被从缓冲池中驱逐。缓冲池被划分为子列表,替换策略是熟悉的LRU技术的变体。

参见缓冲池,驱逐,LRU,页,子列表。

负载平衡

通过在复制或集群配置中将查询请求发送到不同的从服务器来扩展只读连接的技术。通过com.mysql.jdbc.ReplicationDriver类和由配置属性loadBalanceStrategy控制来启用Connector/J的负载平衡。

参见 Connector/J,J2EE。

本地主机

参见连接。

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

参见闩锁,锁定模式,锁定,互斥锁。

锁升级

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

参见锁定,行锁,表锁。

锁定模式

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

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

意向锁应用于表,用于指示事务打算在表的行上获取什么类型的锁。不同的事务可以在同一表上获取不同类型的意向锁,但第一个在表上获取意向排他(IX)锁的事务会阻止其他事务在表上获取任何 S 或 X 锁。相反,第一个在表上获取意向共享(IS)锁的事务会阻止其他事务在表上获取任何 X 锁。这个两阶段过程允许按顺序解决锁请求,而不会阻塞兼容的锁和相应的操作。

查看 意向锁, 锁, 锁定, 事务。

锁定

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

查看 ACID, 并发性, 隔离级别, 锁定, 事务。

锁定读取

一个在InnoDB表上执行锁定操作的SELECT语句。可以是SELECT ... FOR UPDATESELECT ... LOCK IN SHARE MODE。根据事务的隔离级别,可能会产生死锁。与非锁定读取相反。在只读事务中不允许对全局表进行操作。

SELECT ... FOR SHARE在 MySQL 8.0.1 中取代了SELECT ... LOCK IN SHARE MODE,但为了向后兼容性,LOCK IN SHARE MODE仍然可用。

参见 第 17.7.2.4 节,“锁定读取”。

查看 死锁, 隔离级别, 锁定, 非锁定读取, 只读事务。

日志

InnoDB上下文中,“日志”或“日志文件”通常指代由ib_logfileN文件表示的重做日志。另一种InnoDB日志是撤销日志,它是一个存储区域,保存着被活动事务修改的数据的副本。

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

参见 二进制日志,错误日志,常规查询日志,ib_logfile,重做日志,慢查询日志,撤销日志。

日志缓冲区

存储将写入组成重做日志日志文件的数据的内存区域。由innodb_log_buffer_size配置选项控制。

参见 日志文件,重做日志。

日志文件

组成重做日志ib_logfileN文件之一。数据从日志缓冲区内存区域写入这些文件。

参见 ib_logfile,日志缓冲区,重做日志。

日志组

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

参见 ib_logfile,重做日志。

逻辑的

一种涉及高级、抽象方面(如表、查询、索引和其他 SQL 概念)的操作类型。通常,逻辑方面对于使数据库管理和应用程序开发变得方便和可用至关重要。与物理相对。

参见 逻辑备份,物理的。

逻辑备份

一种复制表结构和数据,而不复制实际数据文件的备份。例如,mysqldump命令生成逻辑备份,因为其输出包含诸如CREATE TABLEINSERT等可以重新创建数据的语句。与物理备份相对。逻辑备份提供了灵活性(例如,在恢复之前可以编辑表定义或插入语句),但恢复所需的时间可能比物理备份长得多。

参见 备份,mysqldump,物理备份,恢复。

loose_

一个前缀添加到InnoDB配置选项之后的服务器启动后,这样任何新的配置选项如果当前 MySQL 版本不识别,不会导致启动失败。MySQL 处理以这个前缀开头的配置选项,但如果前缀后的部分不是一个被识别的选项,会给出警告而不是失败。

参见启动。

低水位标记

代表下限的值,通常是某种纠正措施开始或变得更加积极的阈值。与高水位标记相对。

参见高水位标记。

LRU

“最近最少使用”的缩写,一种常见的管理存储区域的方法。当需要为新项目缓存空间时,最近未被使用的项目会被驱逐InnoDB默认使用 LRU 机制来管理缓冲池中的,但在某些情况下会有例外,比如在全表扫描期间可能只读取一页。这种 LRU 算法的变体称为中点插入策略。更多信息,请参见第 17.5.1 节,“缓冲池”。

参见缓冲池,驱逐,全表扫描,中点插入策略,页。

LSN

“日志序列号”的缩写。这个任意增长的值代表了重做日志中记录操作的时间点。(这个时间点不考虑事务边界;它可能落在一个或多个事务的中间。)在InnoDB内部,它用于崩溃恢复和管理缓冲池

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

MySQL 企业备份产品中,您可以指定一个 LSN 来表示从哪个时间点开始进行增量备份。相关 LSN 由mysqlbackup命令的输出显示。一旦您获得了与全备份时间对应的 LSN,您可以指定该值来进行后续的增量备份,其输出包含下一个增量备份的另一个 LSN。

参见缓冲池,崩溃恢复,增量备份,MySQL 企业备份,重做日志,事务。

M

.MRG 文件

包含对其他表的引用的文件,由MERGE存储引擎使用。具有此扩展名的文件始终包含在MySQL Enterprise Backup产品的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协议,通过支持多种语言的客户端库直接与使用InnoDBNDB表的 MySQL 服务器通信。这些 NoSQL 接口允许应用程序实现比直接发出 SQL 语句更高的读写性能,并且可以简化已经将memcached用于内存缓存的系统的应用程序逻辑和部署配置。

另请参阅 NoSQL。

合并

为了将内存中缓存的数据更改应用到数据,例如当页面被带入缓冲池时,并且任何适用的更改记录在更改缓冲区中被合并到缓冲池中的页面中。更新后的数据最终通过刷新机制写入表空间

另请参阅缓冲池, 更改缓冲区, 刷新, 表空间。

元数据锁

一种类型的,防止另一个事务同时使用的表上进行DDL操作。详情请参阅 Section 10.11.4, “Metadata Locking”。

在线操作的增强,特别是在 MySQL 5.6 及更高版本中,重点是减少元数据锁定的数量。目标是让不改变表结构的 DDL 操作(例如CREATE INDEXDROP INDEX用于InnoDB表)在其他事务查询、更新等的同时进行。

另请参阅 DDL, lock, online, transaction。

指标计数器

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

另请参阅 counter, INFORMATION_SCHEMA, Performance Schema。

中点插入策略

最初将页面带入InnoDB 缓冲池的技术不是在列表的“最新”端,而是在中间某处。这一点的确切位置可以根据innodb_old_blocks_pct选项的设置而变化。其目的是,只被读取一次的页面,例如在全表扫描期间,可以比严格的LRU算法更快地从缓冲池中淘汰。更多信息,请参见 第 17.5.1 节,“缓冲池”。

参见 缓冲池, 全表扫描, LRU, 页。

迷你事务

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

参见 提交, 崩溃恢复, DML, 物理, 清除, 重做日志, 回滚, 事务。

混合模式插入

一个INSERT语句,其中为一些新行指定了自增值,但并非所有新行都指定了。例如,多值INSERT可能在某些情况下为自增列指定一个值,而在其他情况下为NULLInnoDB会为那些列值被指定为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/NETC#应用程序的开源框架。

参见 Connector/NET,C#。

mtr

参见 mini-transaction。

多核

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

多版本并发控制

参见 MVCC。

互斥量

“互斥变量”的非正式缩写。(Mutex 本身是“mutual exclusion”的缩写。)InnoDB用来表示和执行对内部内存数据结构的独占访问的低级对象。一旦获得锁,任何其他进程、线程等都无法获得相同的锁。与rw-locks相对应,InnoDB用来表示和执行对内部内存数据结构的共享访问。Mutexes 和 rw-locks 总称为latches

参见 latch,lock,性能模式,Pthreads,rw-lock。

MVCC

“多版本并发控制”的缩写。这种技术允许具有特定隔离级别InnoDB事务执行一致性读操作;也就是说,查询正在被其他事务更新的行,并查看这些更新发生之前的值。这是一种增加并发性的强大技术,允许查询继续进行而无需等待由其他事务持有的

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

参见 ACID,并发性,一致性读,隔离级别,锁,事务。

my.cnf

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

参见 my.ini,选项文件。

my.ini

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

参见 my.cnf,选项文件。

MyODBC 驱动程序

Connector/ODBC的过时名称。

参见 Connector/ODBC。

mysql

mysql程序是 MySQL 数据库的命令行解释器。它处理SQL语句,还处理 MySQL 特定的命令,比如通过将请求传递给mysqld守护进程的SHOW TABLES等命令。

参见 mysqld,SQL。

MySQL 企业备份

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

参见热备份,InnoDB。

mysqlbackup 命令

MySQL 企业备份产品的命令行工具。它为InnoDB表执行热备份操作,并为MyISAM和其他类型的表执行温备份。有关此命令的更多信息,请参见第 32.1 节“MySQL 企业备份概述”。

参见热备份,MySQL 企业备份,温备份。

mysqlclient

由文件libmysqlclient实现的库的非正式名称,扩展名为.a.so

参见 libmysqlclient。

mysqld

mysqld,也称为 MySQL 服务器,是一个单个多线程程序,负责大部分 MySQL 安装工作。它不会生成额外的进程。MySQL 服务器管理包含数据库、表和其他信息(如日志文件和状态文件)的 MySQL 数据目录的访问。

mysqld作为 Unix 守护程序或 Windows 服务运行,不断等待请求并在后台执行维护工作。

参见实例,mysql。

MySQLdb

构成 MySQL Python API基础的开源Python模块的名称。

参见 Python,Python API。

mysqldump

一个执行一些数据库、表和表数据的逻辑备份的命令。结果是可以重现原始模式对象、数据或两者的 SQL 语句。对于大量数据,MySQL 企业备份物理备份解决方案更快,特别是对于恢复操作。

参见逻辑备份,MySQL 企业备份,物理备份,恢复。

N

.NET

参见 ADO.NET,ASP.net,Connector/NET,Mono,Visual Studio。

本地 C API

libmysqlclient的同义词。

参见 libmysql。

自然键

一个被索引的列,通常是一个主键,其值具有一些现实意义。通常不建议使用,因为:

  • 如果值应该发生变化,可能需要进行大量索引维护来重新排序聚簇索引并更新在每个次要索引中重复的主键值的副本。

  • 即使看似稳定的值也可能以难以预测的方式发生变化,这在数据库中很难正确表示。例如,一个国家可能分裂成两个或多个,使原始国家代码变得过时。或者,关于唯一值的规则可能存在例外。例如,即使纳税人识别号意在唯一对应一个人,数据库可能需要处理违反该规则的记录,比如身份盗用的情况。纳税人识别号和其他敏感识别号也不适合作为主键,因为它们可能需要被保护、加密,或者以其他方式与其他列不同对待。

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

参见自增,聚簇索引,主键,次要索引,合成键。

相邻页

与特定页相同区段中的任何。当选择要刷新的页时,通常也会刷新任何的相邻页,作为传统硬盘的 I/O 优化。在 MySQL 5.6 及更高版本中,此行为可以通过配置变量innodb_flush_neighbors来控制;对于没有写入较小数据批量的相同开销的 SSD 驱动器,您可能会关闭该设置。

参见脏页,区段,刷新,页。

下一个键锁

对索引记录上的记录锁和索引记录之前的间隙锁的组合。

参见间隙锁,锁定,记录锁。

非锁定读

一种不使用SELECT ... FOR UPDATESELECT ... LOCK IN SHARE MODE子句的查询。在只读事务中全局表允许的唯一一种查询。与锁定读取相反。参见 Section 17.7.2.3, “Consistent Nonlocking Reads”。

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

另请参阅锁定读取,查询,只读事务。

非重复读取

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

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

在不同的隔离级别中,非重复读取由可串行读取可重复读取级别阻止,而由一致读取读取未提交级别允许。

另请参阅 ACID,一致读取,隔离级别,读取未提交,可重复读取,可串行化,事务。

非阻塞 I/O

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

另请参阅异步 I/O。

规范化

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

例如,一个地址可能被赋予一个唯一的 ID,这样一个人口普查数据库可以通过将该 ID 与家庭的每个成员关联起来来表示住在这个地址的关系,而不是存储多个复杂值的副本,比如123 Main Street, Anytown, USA

举个例子,尽管一个简单的通讯录应用程序可能将每个电话号码存储在与人名和地址相同的表中,但电话公司数据库可能会为每个电话号码分配一个特殊的 ID,并将号码和 ID 存储在单独的表中。这种规范化表示可以在区号分离时简化大规模更新。

规范化并不总是推荐的。主要查询的数据,只通过完全删除和重新加载来更新,通常保存在较少、较大的表中,具有重复值的冗余副本。这种数据表示被称为去规范化,在数据仓库应用程序中经常发现。

参见去规范化,外键,OLTP,关系型。

NoSQL

一种广义上的数据访问技术集合,不使用SQL语言作为其主要读写数据的机制。一些 NoSQL 技术充当键值存储,只接受单值读取和写入;一些放宽了ACID方法的限制;还有一些不需要预先计划的模式。MySQL 用户可以通过使用memcached API 直接访问某些种类的 MySQL 表,将 NoSQL 风格的处理与 SQL 操作结合起来,以实现速度和简单性,同时保持灵活性和便利性。

参见 ACID,memcached,模式,SQL。

NOT NULL 约束

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

参见列,约束,NULL,主键,引用完整性。

NULL

SQL 中的一个特殊值,表示数据的缺失。涉及NULL 值的任何算术运算或相等性测试都会产生一个NULL 结果。 (因此,它类似于 IEEE 浮点概念中的 NaN,“不是一个数字”。)任何聚合计算,如AVG(),在确定要除以的行数时会忽略带有NULL 值的行。唯一可以与NULL 值一起使用的测试使用 SQL 习语IS NULLIS NOT NULL

NULL 值在索引操作中起着重要作用,因为为了性能,数据库必须尽量减少跟踪缺失数据值的开销。通常,NULL 值不会存储在索引中,因为使用标准比较运算符测试带有该列的NULL 值的行的查询永远不会匹配。出于同样的原因,唯一索引不会阻止NULL 值;这些值只是不在索引中表示。在列上声明NOT NULL 约束提供了确保没有遗漏在索引之外的行的保证,从而实现更好的查询优化(准确计算行数和估计是否使用索引)。

因为主键必须能够唯一标识表中的每一行,单列主键不能包含任何NULL值,而多列主键不能包含所有列中都有NULL值的行。

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

另请参阅索引,主键,SQL。

O

.OPT 文件

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

另请参阅 MySQL Enterprise Backup,mysqlbackup 命令。

ODBC

开放数据库连接性的缩写,一个行业标准 API。通常与基于 Windows 的服务器一起使用,或者需要 ODBC 与 MySQL 通信的应用程序。MySQL ODBC 驱动程序称为Connector/ODBC

另请参阅 Connector/ODBC。

离线列

包含变长数据(如BLOBVARCHAR)的列,长度过长无法适应B 树页。数据存储在溢出页中。对于这种存储,DYNAMIC行格式比旧的COMPACT行格式更有效。

另请参阅 B 树,紧凑行格式,动态行格式,溢出页。

OLTP

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

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

另请参阅数据仓库,DML,InnoDB,查询,行锁,事务。

在线

一种操作类型,不需要数据库停机、阻塞或受限操作。通常应用于DDL。缩短受限操作时间的操作,如快速索引创建,已经发展成 MySQL 5.6 中更广泛的在线 DDL操作集。

在备份的背景下,热备份是在线操作,而温备份部分是在线操作。

参见 DDL, 快速索引创建, 热备份, 在线 DDL, 温备份。

在线 DDL

一种功能,可在DDL(主要是ALTER TABLE)操作期间提高InnoDB表的性能、并发性和可用性。详情请参见第 17.12 节,“InnoDB 和在线 DDL”。

具体细节根据操作类型而变化。在某些情况下,表可以在进行ALTER TABLE操作时同时进行修改。该操作可能无需复制表,或者使用一种特别优化的表复制类型。对于原地操作,DML 日志空间使用由innodb_online_alter_log_max_size配置选项控制。

该功能是 MySQL 5.5 中快速索引创建功能的增强版。

参见 DDL, 快速索引创建, 在线。

乐观

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

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

乐观策略的反面是悲观策略,其中系统被优化以处理不可靠且频繁失败的操作。在数据库系统中,这种方法很少见,因为在选择可靠的硬件、网络和算法时需要非常小心。

参见 commit,并发性,DML,锁定,悲观,引用完整性。

优化器

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

参见 index,join,query,table。

选项

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

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

参见 InnoDB,选项,选项文件。

选项文件

保存 MySQL 实例配置选项的文件。传统上,在 Linux 和 Unix 上,该文件名为my.cnf,在 Windows 上为my.ini

参见配置文件,my.cnf,my.ini,选项。

溢出页

分别分配的磁盘,用于存储长度可变的列(如BLOBVARCHAR),这些列太长无法放在一个B-tree页上。相关列被称为离页列

参见 B-tree,离页列,页。

P

.par 文件

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

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

参见 MySQL 企业备份,mysqlbackup 命令。

代表InnoDB在磁盘(数据文件)和内存(缓冲池)之间一次传输多少数据的单位。一个页可以包含一个或多个,取决于每行有多少数据。如果一行无法完全适应单个页,InnoDB会设置额外的指针式数据结构,以便将行的信息存储在一个页中。

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

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

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

参见缓冲池,紧凑行格式,压缩行格式,数据文件,extent,页面大小,行。

页面清理器

一个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应用程序。随着个别行的更新,将更少的数据复制到内存,写入磁盘,重新组织,锁定等。

另请参见 磁盘限制, 每表文件, 通用表空间, 实例, OLTP, 页, SSD, 系统表空间, 表空间。

父表

外键关系中保存从子表指向的初始列值的表。删除或更新父表中的行的后果取决于外键定义中的 ON UPDATEON DELETE 子句。子表中具有相应值的行可能会自动删除或更新,或者这些列可能被设置为NULL,或者操作可能被阻止。

另请参见 子表, 外键。

部分备份

包含 MySQL 数据库中部分或 MySQL 实例中部分数据库的备份。与完全备份相对。

另请参见 备份, 完全备份, 表。

部分索引

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

另请参见 索引, 索引前缀。

部分信任

通常由托管提供商使用的执行环境,应用程序具有某些权限但不具备其他权限。例如,应用程序可能能够通过网络访问数据库服务器,但在读取和写入本地文件方面被“沙盒化”。

另请参见 Connector/NET。

性能模式

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

另请参见 INFORMATION_SCHEMA, 闩锁, 互斥锁, 读写锁。

Perl

一种源自 Unix 脚本和报表生成的编程语言。集成了高性能正则表达式和文件 I/O。通过 CPAN 等仓库提供了大量可重用模块。

另请参见 Perl API。

Perl API

用 Perl 语言编写的 MySQL 应用程序的开源API。通过 DBIDBD::mysql 模块实现。详情请参见 第 31.9 节,“MySQL Perl API”。

另请参见 API, Perl。

持久统计

一种功能,将InnoDB 索引统计信息存储在磁盘上,为查询提供更好的计划稳定性。有关更多信息,请参见 Section 17.8.10.1, “Configuring Persistent Optimizer Statistics Parameters”。

参见 index,optimizer,plan stability,query,table。

悲观

一种为了安全性而牺牲性能或并发性的方法论。如果高比例的请求或尝试可能失败,或者失败请求的后果严重,则此方法适用。InnoDB使用所谓的悲观锁定策略,以最小化死锁的机会。在应用程序级别,您可以通过在事务开始时获取事务所需的所有锁的悲观策略来避免死锁。

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

参见 deadlock,locking,optimistic。

幻读

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

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

在不同的隔离级别中,幻读被可串行读级别阻止,而被可重复读一致读读未提交级别允许。

参见 consistent read,isolation level,non-repeatable read,READ UNCOMMITTED,REPEATABLE READ,SERIALIZABLE,transaction。

PHP

一种起源于网络应用程序的编程语言。代码通常嵌入在网页源代码中的块中,输出会在通过网络服务器传输时替换到页面中。这与像 CGI 脚本这样打印整个网页形式输出的应用程序形成对比。PHP 编码风格用于高度交互和动态的网页。现代 PHP 程序也可以作为命令行或 GUI 应用程序运行。

MySQL 应用程序使用其中一个PHP API编写。可在C中编写可重用模块,并从 PHP 中调用。

使用ASP.net是另一种编写使用 MySQL 的服务器端网页的技术。

参见 ASP.net,C,PHP API。

PHP API

有几个API可用于在PHP语言中编写 MySQL 应用程序:原始 MySQL API(Mysql),MySQL Improved Extension(Mysqli),MySQL Native Driver(Mysqlnd),MySQL 函数(PDO_MYSQL)和 Connector/PHP。有关详细信息,请参见 MySQL 和 PHP。

参见 API,PHP。

物理

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

参见逻辑,物理备份。

物理备份

复制实际数据文件的备份。例如,MySQL Enterprise Backup产品的mysqlbackup命令生成物理备份,因为其输出包含可以直接被mysqld服务器使用的数据文件,从而实现更快的恢复操作。与逻辑备份相对。

参见备份,逻辑备份,MySQL Enterprise Backup,恢复。

PITR

恢复到特定时间点的缩写。

参见恢复到特定时间点。

计划稳定性

查询执行计划的一个属性,其中优化器每次对于给定的查询都做出相同的选择,以便性能保持一致和可预测。

参见查询,查询执行计划。

恢复到特定时间点

将备份恢复以重新创建数据库在特定日期和时间的状态的过程。通常缩写为“PITR”。由于指定的时间很少与备份时间完全对应,因此这种技术通常需要结合物理备份逻辑备份。例如,使用MySQL Enterprise Backup产品,您可以恢复指定时间点之前的最后一个备份,然后从备份时间和 PITR 时间之间的二进制日志中重放更改。

参见备份,二进制日志,逻辑备份,MySQL Enterprise Backup,物理备份。

端口

数据库服务器监听的 TCP/IP 套接字号码,用于建立连接。通常与主机一起指定。根据您对网络加密的使用,可能会有一个用于未加密流量的端口,另一个用于SSL连接。

参见 连接, 主机, SSL.

前缀

参见 索引前缀.

预备备份

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

参见 二进制日志, 热备份, 增量备份, MySQL Enterprise Backup, 原始备份, 恢复.

预编译语句

事先分析的 SQL 语句,用于确定高效的执行计划。它可以多次执行,而无需每次都进行解析和分析的开销。可以通过占位符在WHERE子句中每次替换不同的文字值。这种替换技术提高了安全性,防止某些类型的 SQL 注入攻击。还可以减少将返回值转换和复制到程序变量的开销。

尽管可以通过 SQL 语法直接使用预编译语句,但各种连接器都有用于操作预编译语句的编程接口,这些 API 比通过 SQL 更有效。

参见 客户端预编译语句, 连接器, 服务器端预编译语句.

主键

一组列,以及隐含的基于这组列的索引,可以唯一标识表中的每一行。因此,它必须是一个不包含任何NULL值的唯一索引。

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

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

参见 聚簇索引, 索引, 自然键, 合成键.

主要的

Kerberos 术语,用于表示命名实体,如用户或服务器。

参见服务主体名称,用户主体名称。

进程

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

参见并发性,线程。

伪记录

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

参见最小记录,锁定,最大记录。

Pthreads

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

参见互斥锁。

清理

一种由一个或多个单独的后台线程(由innodb_purge_threads控制)执行的垃圾收集类型,定期按计划运行。清理从历史列表中解析和处理撤销日志页面,以删除之前标记为删除(通过先前的DELETE语句)并且不再需要用于MVCC回滚的聚集和次要索引记录。清理在处理完撤销日志页面后会从历史列表中释放它们。

参见历史列表,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

参见 API,Python。

Q

查询

SQL中,一种从一个或多个中读取信息的操作。根据数据的组织方式和查询的参数,查询可能通过查询索引来进行优化。如果涉及多个表,则该查询被称为连接

基于历史原因,有时关于语句的内部处理的讨论会在更广泛的意义上使用“查询”这个术语,包括其他类型的 MySQL 语句,如DDLDML语句。

参见 DDL,DML,索引,连接,SQL,表。

查询执行计划

优化器关于如何最有效地执行查询的一组决策,包括使用哪个索引或索引,以及连接表的顺序。计划稳定性涉及对给定查询一致做出相同选择。

参见索引,连接,计划稳定性,查询。

查询日志

参见通用查询日志。

静止

为了减少数据库活动量,通常是为了准备操作,如ALTER TABLE备份关闭。可能涉及尽可能多地进行刷新,以便InnoDB不会继续进行后台 I/O。

在 MySQL 5.6 及更高版本中,语法FLUSH TABLES ... FOR EXPORT会将一些数据写入磁盘,用于简化通过复制数据文件备份这些InnoDB表的过程。

参见备份,刷新,InnoDB,关闭。

R

R 树

用于对多维数据(如地理坐标、矩形或多边形)进行空间索引的树数据结构。

参见 B 树。

RAID

“廉价磁盘冗余阵列”的缩写。将 I/O 操作分布在多个驱动器上可以在硬件级别实现更大的并发性,并提高低级别写操作的效率,否则这些操作将按顺序执行。

查看 并发性。

随机潜水

一种快速估算列中不同值数量(列的基数)的技术。InnoDB从索引中随机抽取页面,并使用这些数据来估算不同值的数量。

查看 基数。

原始备份

MySQL Enterprise Backup 产品生成的初始备份文件集,在应用二进制日志和任何增量备份所反映的更改之前。在此阶段,文件尚未准备好恢复。应用这些更改后,文件被称为准备备份

查看 二进制日志,热备份,ibbackup_logfile,增量备份,MySQL Enterprise Backup,准备备份,恢复。

读已提交

一种使用锁定策略的隔离级别,在性能方面放宽了一些事务之间的保护。事务无法看到其他事务未提交的数据,但可以看到当前事务开始后另一个事务提交的数据。因此,事务永远不会看到任何错误的数据,但它所看到的数据可能在一定程度上取决于其他事务的时间安排。

当具有此隔离级别的事务执行UPDATE ... WHEREDELETE ... WHERE操作时,其他事务可能需要等待。事务可以执行SELECT ... FOR UPDATELOCK IN SHARE MODE操作而不会让其他事务等待。

SELECT ... FOR SHARE 在 MySQL 8.0.1 中取代了 SELECT ... LOCK IN SHARE MODE,但为了向后兼容性,LOCK IN SHARE MODE 仍然可用。

查看 ACID,隔离级别,锁定,可重复读,可串行化,事务。

读现象

当一个事务读取另一个事务已修改的数据时可能发生的脏读不可重复读幻读等现象。

查看 脏读,不可重复读,幻读。

读未提交

提供事务之间保护最少的隔离级别。查询采用一种锁定策略,允许它们在通常需要等待另一个事务的情况下继续进行。然而,这种额外的性能是以更少可靠的结果为代价的,包括被其他事务更改但尚未提交的数据(称为脏读)。请谨慎使用此隔离级别,并注意结果可能不一致或无法重现,这取决于其他事务在同一时间正在做什么。通常,具有此隔离级别的事务只执行查询,不执行插入、更新或删除操作。

参见 ACID、脏读、隔离级别、锁定、事务。

读视图

MVCC 机制在 InnoDB 中使用的内部快照。根据其隔离级别,某些事务会将数据值视为事务(或在某些情况下,语句)开始时的数值。使用读视图的隔离级别包括可重复读读已提交读未提交

参见 隔离级别、MVCC、读已提交、读未提交、可重复读、事务。

预读

一种 I/O 请求类型,异步地将一组(整个区段)预取到缓冲池中,以防这些页很快会被使用。线性预读技术根据前一个区段中页的访问模式预取一个区段的所有页。随机预读技术在缓冲池中有来自同一区段的一定数量的页时,预取该区段的所有页。随机预读不是 MySQL 5.5 的一部分,但在 MySQL 5.6 中通过 innodb_random_read_ahead 配置选项重新引入。

参见 缓冲池、区段、页。

只读事务

一种可以通过消除为每个事务创建读视图所涉及的一些簿记来优化InnoDB表的事务类型。只能执行非锁定读查询。可以使用语法START TRANSACTION READ ONLY 明确启动,或在某些条件下自动启动。有关详细信息,请参见 Section 10.5.3, “Optimizing InnoDB Read-Only Transactions”。

参见非锁定读取,读视图,事务。

记录锁

对索引记录的锁。例如,SELECT c1 FROM t WHERE c1 = 10 FOR UPDATE;阻止任何其他事务插入、更新或删除c1值为 10 的行。与间隙锁下一个键锁形成对比。

参见间隙锁,锁,下一个键锁。

重做

当 DML 语句对InnoDB表进行更改时,在重做日志中记录的以记录为单位的数据。在崩溃恢复期间用于纠正由不完整事务写入的数据。不断增加的LSN值表示通过重做日志传递的重做数据的累积量。

参见崩溃恢复,DML,LSN,重做日志,事务。

重做日志

崩溃恢复期间使用的基于磁盘的数据结构,用于纠正由不完整事务写入的数据。在正常操作期间,它对请求进行编码,以更改InnoDB表数据,这些请求来自 SQL 语句或低级 API 调用。在意外关闭之前未完成更新数据文件的修改将自动重放。

重做日志在磁盘上以一组重做日志文件的形式物理表示。重做日志数据以受影响的记录为编码单位;这些数据总称为重做。数据通过重做日志的传递由一个不断增加的LSN值表示。

有关更多信息,请参见第 17.6.5 节,“重做日志”

参见崩溃恢复,数据文件,ib_logfile,日志缓冲区,LSN,重做,关闭,事务。

重做日志归档

一种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子句的ORAND运算符代表并集和交集的概念。

参见 ACID, 列, 约束, 外键, 规范化。

相关性

全文搜索功能中,表示搜索字符串与全文索引中数据之间相似性的数字。例如,当您搜索单个词时,该词在文本中出现多次的行通常比仅出现一次的行更相关。

参见 全文搜索, 全文索引。

可重复读

InnoDB 的默认隔离级别。它阻止其他事务更改被查询的任何行,从而阻止不可重复读但不阻止幻读。它使用一种适度严格的锁定策略,以便事务中的所有查询看到来自同一快照的数据,即事务启动时的数据。

当具有此隔离级别的事务执行 UPDATE ... WHEREDELETE ... WHERESELECT ... FOR UPDATELOCK IN SHARE MODE 操作时,其他事务可能需要等待。

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

参见 ACID, consistent read, isolation level, locking, phantom, transaction。

复本

复本是应用于字符集的术语。字符集复本是集合中的字符。参见 第 12.2.1 节,“字符集复本”。

复制品

复制拓扑结构中的数据库服务器机器,接收另一台服务器()的更改并应用相同的更改。因此,它保持与源相同的内容,尽管可能稍有滞后。

在 MySQL 中,复制品通常用于灾难恢复,以取代失败的源。它们也常用于测试软件升级和新设置,以确保数据库配置更改不会影响性能或可靠性。

复制品通常具有高工作负载,因为它们处理从源中中继的所有DML(写入)操作,以及用户查询。为了确保复制品能够足够快地应用源的更改,它们通常具有快速的 I/O 设备以及足够的 CPU 和内存在同一台服务器上运行多个数据库实例。例如,源可能使用硬盘存储,而复制品使用SSD

参见 DML,复制,服务器,源,SSD。

复制

将更改从发送到一个或多个副本的实践,以便所有数据库具有相同的数据。这种技术具有广泛的用途,例如用于更好的可伸缩性的负载平衡,灾难恢复以及测试软件升级和配置更改。更改可以通过称为基于行的复制基于语句的复制的方法在数据库之间发送。

参见复制,基于行的复制,源,基于语句的复制。

恢复

MySQL Enterprise Backup产品的一组备份文件放置到 MySQL 中供使用的过程。此操作可用于修复损坏的数据库,返回到较早的时间点,或(在复制上下文中)设置新的副本。在MySQL Enterprise Backup产品中,此操作由mysqlbackup命令的copy-back选项执行。

参见热备份,MySQL Enterprise Backup,mysqlbackup 命令,准备备份,副本,复制。

回滚

结束事务SQL语句,撤消事务所做的任何更改。它是提交的相反,后者使事务中所做的任何更改永久化。

默认情况下,MySQL 使用自动提交设置,每个 SQL 语句后自动发出一个提交。您必须在使用回滚技术之前更改此设置。

参见 ACID,自动提交,提交,SQL,事务。

回滚段

包含撤销日志的存储区域。回滚段传统上驻留在系统表空间中。从 MySQL 5.6 开始,回滚段可以驻留在撤销表空间中。从 MySQL 5.7 开始,回滚段也分配给全局临时表空间

参见全局临时表空间,系统表空间,撤销日志,撤销表空间。

由一组定义的逻辑数据结构。一组行组成一个。在InnoDB数据文件中,每个可以包含一个或多个行。

尽管InnoDB使用行格式一词以保持与 MySQL 语法的一致性,但行格式是每个表的属性,并适用于该表中的所有行。

参见 列, 数据文件, 页, 行格式, 表。

行格式

InnoDB表的的磁盘存储格式。随着InnoDB获得新的功能,如压缩,新的行格式被引入以支持由此带来的存储效率和性能的改进。

InnoDB表的行格式由ROW_FORMAT选项或innodb_default_row_format配置选项(在 MySQL 5.7.9 中引入)指定。行格式包括REDUNDANTCOMPACTCOMPRESSEDDYNAMIC。要查看InnoDB表的行格式,请发出SHOW TABLE STATUS语句或查询INFORMATION_SCHEMA中的InnoDB表元数据。

参见 紧凑行格式, 压缩行格式, 压缩, 动态行格式, 冗余行格式, 行, 表。

行锁

一种,防止另一个事务以不兼容的方式访问行。同一表中的其他行可以被其他事务自由写入。这是在InnoDB表上进行DML操作时执行的锁定类型。

MyISAM使用的表锁相对应,或在无法使用在线 DDL进行DDL操作的InnoDB表上使用的锁;这些锁会阻止对表的并发访问。

参见 DDL, DML, InnoDB, lock, locking, online DDL, table lock, transaction。

基于行的复制

一种复制形式,其中事件从传播,指定如何在副本上更改单个行。对于innodb_autoinc_lock_mode选项的所有设置都可以安全使用。

另请参阅自增锁定,innodb_autoinc_lock_mode,副本,复制,源,基于语句的复制。

行级锁定

InnoDB表使用的锁定机制,依赖于行锁而不是表锁。多个事务可以同时修改同一张表。只有当两个事务尝试修改同一行时,其中一个事务才会等待另一个完成(并释放其行锁)。

另请参阅 InnoDB,锁定,行锁,表锁,事务。

Ruby

一种强调动态类型和面向对象编程的编程语言。某些语法对Perl开发人员很熟悉。

另请参阅 API,Perl,Ruby API。

Ruby API

mysql2,基于libmysqlclient API 库,适用于开发 MySQL 应用程序的 Ruby 程序员。有关更多信息,请参见第 31.11 节,“MySQL Ruby APIs”。

另请参阅 libmysql,Ruby。

rw-lock

InnoDB用于表示和执行对内部内存数据结构的共享访问锁定的低级对象,遵循某些规则。与互斥锁相对,InnoDB用于表示和执行对内部内存数据结构的独占访问。互斥锁和 rw-locks 总称为闩锁

rw-lock类型包括s-locks(共享锁)、x-locks(独占锁)和sx-locks(共享-独占锁)。

  • s-lock提供对共享资源的读取权限。

  • x-lock提供对共享资源的写访问权限,同时不允许其他线程进行不一致的读取。

  • sx-lock提供对共享资源的写访问权限,同时允许其他线程进行不一致的读取。sx-locks在 MySQL 5.7 中引入,以优化并发性并提高读写工作负载的可伸缩性。

以下矩阵总结了rw-lock类型的兼容性。

S SX X
S 兼容 兼容 冲突
SX 兼容 冲突 冲突
X 冲突 冲突 冲突

另请参阅闩锁,锁定,互斥锁,性能模式。

S

保存点

保存点有助于实现嵌套事务。它们可用于为较大事务的一部分的表上的操作提供范围。例如,在预订系统中安排旅行可能涉及预订几个不同的航班;如果所需航班不可用,您可以回滚涉及预订该航段的更改,而不会回滚早些时候成功预订的航班。

参见回滚,事务。

可扩展性

向系统添加更多工作并发出更多同时请求的能力,而不会因超出系统容量限制而导致性能突然下降。软件架构、硬件配置、应用编码和工作负载类型都对可扩展性起作用。当系统达到最大容量时,增加可扩展性的常用技术是纵向扩展(增加现有硬件或软件的容量)和横向扩展(添加新服务器和更多 MySQL 实例)。通常与可用性一起作为大规模部署的关键方面。

参见可用性,横向扩展,纵向扩展。

横向扩展

通过添加新服务器和更多 MySQL 实例来增加可扩展性的技术。例如,设置复制、NDB 集群、连接池或其他功能,将工作分布在一组服务器上。与纵向扩展相对。

参见可扩展性,纵向扩展。

纵向扩展

通过增加现有硬件或软件的容量来增加可扩展性的技术。例如,增加服务器的内存并调整与内存相关的参数,如innodb_buffer_pool_sizeinnodb_buffer_pool_instances。与横向扩展相对。

参见可扩展性,横向扩展。

模式

从概念上讲,模式是一组相关的数据库对象,如表、表列、列的数据类型、索引、外键等。这些对象通过 SQL 语法连接在一起,因为列组成表,外键引用表和列,依此类推。理想情况下,它们也在逻辑上连接在一起,作为统一应用程序或灵活框架的一部分共同工作。例如,INFORMATION_SCHEMAperformance_schema数据库在其名称中使用“模式”强调它们包含的表和列之间的密切关系。

在 MySQL 中,从物理上讲,模式数据库是同义词。您可以在 MySQL SQL 语法中使用关键字SCHEMA代替DATABASE,例如使用CREATE SCHEMA代替CREATE DATABASE

其他一些数据库产品进行了区分。例如,在 Oracle Database 产品中,模式仅代表数据库的一部分:由单个用户拥有的表和其他对象。

参见数据库,INFORMATION_SCHEMA,Performance Schema。

SDI

“序列化字典信息”的缩写。

参见序列化字典信息(SDI)。

搜索索引

在 MySQL 中,全文搜索查询使用一种特殊类型的索引,即全文索引。在 MySQL 5.6.4 及更高版本中,InnoDBMyISAM表都支持FULLTEXT索引;以前,这些索引仅适用于MyISAM表。

参见全文搜索,全文索引。

次要索引

一种代表表列子集的InnoDB 索引。一个InnoDB表可以有零个、一个或多个次要索引。(与每个InnoDB表都需要的聚簇索引相对比,它存储了所有表列的数据。)

一个次要索引可用于满足仅需要来自索引列的值的查询。对于更复杂的查询,它可用于识别表中相关行,然后通过使用聚簇索引进行查找来检索这些行。

创建和删除次要索引传统上涉及从复制InnoDB表中的所有数据中产生的显著开销。快速索引创建功能使得InnoDB次要索引的CREATE INDEXDROP INDEX语句都变得更快。

参见聚簇索引,快速索引创建,索引。

InnoDB 表空间内的一个分区。如果一个表空间类似于一个目录,那么段类似于该目录中的文件。一个段可以增长。可以创建新的段。

例如,在每表一个文件表空间中,表数据位于一个段中,每个相关索引位于自己的段中。系统表空间包含许多不同的段,因为它可以容纳许多表及其相关索引。在 MySQL 8.0 之前,系统表空间还包括一个或多个用于撤销日志回滚段

段随着数据的插入和删除而增长和缩小。当一个段需要更多空间时,它会每次扩展一个extent(1 兆字节)。同样,当不再需要该 extent 中的所有数据时,一个段会释放一个 extent 大小的空间。

另请参阅 extent, file-per-table, rollback segment, system tablespace, tablespace, undo log.

选择性

数据分布的一个属性,即列中不同值的数量(其基数)除以表中记录的数量。高选择性意味着列值相对唯一,并且可以通过索引有效地检索。如果你(或查询优化器)可以预测WHERE子句中的测试只匹配表中的少量行(或比例),那么如果首先评估该测试,使用索引,整体查询往往会更有效率。

另请参阅 基数, 查询.

半一致性读取

用于UPDATE语句的一种读取操作,是READ COMMITTEDconsistent read的组合。当UPDATE语句检查已经锁定的行时,InnoDB将最新提交的版本返回给 MySQL,以便 MySQL 可以确定该行是否与UPDATEWHERE条件匹配。如果行匹配(必须更新),MySQL 再次读取该行,这时InnoDB要么锁定它,要么等待锁定。这种读取操作只能在事务具有 READ COMMITTED 隔离级别时发生。

另请参阅 consistent read, isolation level, READ COMMITTED.

可串行化

使用最保守的锁定策略的隔离级别,以防止任何其他事务在此事务读取的数据插入或更改数据,直到完成。这样,同一查询可以在事务内反复运行,并确保每次都检索相同的结果集。任何试图更改自当前事务开始以来由另一个事务提交的数据的尝试,都会导致当前事务等待。

这是 SQL 标准指定的默认隔离级别。实际上,很少需要这种严格程度,所以InnoDB的默认隔离级别是下一个最严格的,REPEATABLE READ

另请参阅 ACID, consistent read, isolation level, locking, REPEATABLE READ, transaction.

序列化字典信息(SDI)

序列化形式的字典对象元数据。SDI 以JSON格式存储。

截至 MySQL 8.0.3 版本,SDI 存在于所有InnoDB表空间文件中,临时表空间和撤销表空间文件除外。表空间文件中存在 SDI 提供了元数据冗余。例如,如果数据字典不可用,可以使用ibd2sdi实用程序从表空间文件中提取字典对象元数据。

对于MyISAM表,SDI 存储在模式目录中的.sdi元数据文件中。执行IMPORT TABLE操作需要一个 SDI 元数据文件。

另请参阅每表文件,通用表空间,系统表空间,表空间。

服务器

一种连续运行的程序类型,等待接收并对来自另一个程序(客户端)的请求进行操作。由于通常整个计算机专用于运行一个或多个服务器程序(如数据库服务器、Web 服务器、应用程序服务器或这些的组合),术语服务器也可以指运行服务器软件的计算机。

另请参阅客户端,mysqld。

服务器端预编译语句

由 MySQL 服务器管理的预编译语句。历史上,与服务器端预编译语句相关的问题导致Connector/JConnector/PHP开发人员有时使用客户端预编译语句。在现代 MySQL 服务器版本中,建议使用服务器端预编译语句以获得更好的性能、可伸缩性和内存效率。

另请参阅客户端端预编译语句,Connector/J,Connector/PHP,预编译语句。

服务主体名称

代表服务的 Kerberos 命名实体的名称。

另请参阅主体。

服务票证

提供对应用程序服务的 Kerberos 票证,例如由 Web 服务器或数据库服务器提供的服务。

servlet

另请参阅 Connector/J。

会话临时表空间

存储用户创建的临时表和当InnoDB配置为内部临时表的磁盘存储引擎时由优化器创建的内部临时表的临时表空间

另请参阅优化器,临时表,临时表空间。

共享锁

一种类型,允许其他事务读取被锁定的对象,并且还可以在其上获取其他共享锁,但不能对其进行写入。与排他锁相反。

参见独占锁,锁,事务。

共享表空间

另一种指代系统表空间通用表空间的方式。通用表空间在 MySQL 5.7 中引入。一个共享表空间可以容纳多个表。只能有一个表位于每个表的文件表空间中。

参见通用表空间,系统表空间。

锐检查点

将所有缓冲池页刷新到磁盘的过程,其重做条目包含在重做日志的某个部分中。在InnoDB重用日志文件的一部分之前发生;日志文件以循环方式使用。通常与写入密集的工作负载一起发生。

参见脏页,刷新,重做日志,工作负载。

关机

停止 MySQL 服务器的过程。默认情况下,此过程会清理InnoDB表的操作,因此InnoDB在关机时可能会,但稍后启动会很快。如果跳过清理操作,则关机会很,但必须在下次重新启动时执行清理。

InnoDB的关机模式由innodb_fast_shutdown选项控制。

参见快速关机,InnoDB,慢关机,启动。

从属

参见副本。

慢查询日志

用于调整 MySQL 服务器处理的 SQL 语句性能的一种日志类型。日志信息存储在文件中。您必须启用此功能才能使用它。您可以控制记录哪些类别的“慢”SQL 语句。有关更多信息,请参见第 7.4.5 节,“慢查询日志”。

参见通用查询日志,日志。

慢关机

一种在完成之前执行额外InnoDB刷新操作的关机类型。也称为干净关机。由配置参数innodb_fast_shutdown=0或命令SET GLOBAL innodb_fast_shutdown=0;指定。尽管关机本身可能需要更长时间,但这段时间应该会在随后的启动中节省下来。

参见干净关机,快速关机,关机。

快照

表示特定时间点的数据,即使其他事务提交了更改,也保持不变。某些隔离级别使用它来允许一致性读取

另请参见 commit,consistent read,isolation level,transaction。

排序缓冲区

在创建InnoDB索引期间用于对数据进行排序的缓冲区。排序缓冲区大小通过innodb_sort_buffer_size配置选项进行配置。

复制场景中处理数据的初始插入、更新和删除请求的数据库服务器机器。这些更改会传播到其他被称为副本的服务器上,并在其上重复。

另请参见副本,复制。

空间 ID

用于在 MySQL 实例中唯一标识InnoDB tablespace 的标识符。系统 tablespace 的空间 ID 始终为零;这个相同的 ID 适用于系统 tablespace 内或通用 tablespace 内的所有表。每个file-per-table tablespace 和general tablespace都有自己的空间 ID。

在 MySQL 5.6 之前,这个硬编码值在移动InnoDB tablespace 文件之间的 MySQL 实例之间存在困难。从 MySQL 5.6 开始,您可以通过使用涉及语句FLUSH TABLES ... FOR EXPORTALTER TABLE ... DISCARD TABLESPACEALTER TABLE ... IMPORT TABLESPACE可传输 tablespace功能在实例之间复制 tablespace 文件。调整空间 ID 所需的信息包含在您与 tablespace 一起复制的.cfg 文件中。有关详细信息,请参见 Section 17.6.1.3, “导入 InnoDB 表”。

另请参见.cfg 文件,file-per-table,general tablespace,.ibd 文件,system tablespace,tablespace,transportable tablespace。

稀疏文件

一种文件类型,通过将表示空块的元数据写入磁盘而不是写入实际的空间,更有效地利用文件系统空间。InnoDB transparent page compression 功能依赖于稀疏文件支持。有关更多信息,请参见 Section 17.9.2, “InnoDB 页面压缩”。

另请参见 hole punching,transparent page compression。

spin

一种等待操作类型,不断测试资源是否变得可用。这种技术用于通常仅短暂持有资源的情况,其中在“忙等待”中等待比让线程休眠并执行上下文切换更有效。如果资源在短时间内不可用,则自旋循环停止,并使用另一种等待技术。

参见闩锁,锁,互斥锁,等待。

SPN

参见服务主体名称。

Spring

一种基于 Java 的应用程序框架,旨在通过提供一种配置组件的方式来协助应用程序设计。

参见 J2EE。

SQL

用于执行数据库操作的标准结构化查询语言。通常分为DDLDML查询等类别。MySQL 包括一些额外的语句类别,如复制。查看第十一章,语言结构了解 SQL 语法的基本构建块,第十三章,数据类型了解用于 MySQL 表列的数据类型,第十五章,SQL 语句了解 SQL 语句及其相关类别的详细信息,以及第十四章,函数和运算符了解在查询中使用的标准和 MySQL 特定函数。

参见 DDL,DML,查询,复制。

SQLState

JDBC标准定义的错误代码,用于应用程序使用Connector/J进行异常处理。

参见 Connector/J,JDBC。

SSD

“固态硬盘”的缩写。一种具有不同性能特征的存储设备,与传统硬盘驱动器(HDD)相比:存储容量较小,随机读取速度更快,无移动部件,并且有一些影响写入性能的考虑因素。其性能特征可以影响磁盘限制工作负载的吞吐量。

参见磁盘限制,HDD。

SSL

“安全套接字层”的缩写。为应用程序与 MySQL 数据库服务器之间的网络通信提供加密层。

参见密钥库,信任库。

ST

参见服务票。

启动

启动 MySQL 服务器的过程。通常由第 6.3 节,“服务器和服务器启动程序”中列出的程序之一执行。与关闭相反。

另请参阅关闭。

语句拦截器

用于跟踪、调试或增强数据库应用程序发出的 SQL 语句的一种拦截器类型。有时也被称为命令拦截器

在使用Connector/JJava应用程序中,设置这种类型的拦截器涉及实现com.mysql.jdbc.StatementInterceptorV2接口,并向连接字符串添加一个statementInterceptors属性。

在使用Connector/NETVisual Studio应用程序中,设置这种类型的拦截器涉及定义一个从BaseCommandInterceptor类继承的类,并将该类名指定为连接字符串的一部分。

另请参阅命令拦截器、连接字符串、Connector/J、Connector/NET、拦截器、Java、Visual Studio。

基于语句的复制

一种复制形式,其中 SQL 语句从发送并在副本上重放。需要注意innodb_autoinc_lock_mode选项的设置,以避免与自增锁定可能出现的时间问题。

另请参阅自增锁定、innodb_autoinc_lock_mode、副本、复制、基于行的复制、源。

统计信息

与每个InnoDB索引相关的估计值,用于构建高效的查询执行计划。主要值是基数(不同值的数量)和表行或索引条目的总数。表的统计信息代表其主键索引中的数据。次要索引的统计信息代表该索引覆盖的行。

这些值是估计的,而不是精确计算,因为在任何时刻,不同的事务可以向同一表插入和删除行。为了避免频繁重新计算值,您可以启用持久统计信息,其中值存储在InnoDB系统表中,并仅在发出ANALYZE TABLE语句时刷新。

您可以通过innodb_stats_method配置选项控制在计算统计信息时如何处理NULL值。

通过INFORMATION_SCHEMAPERFORMANCE_SCHEMA表,还可以获得有关数据库对象和数据库活动的其他类型统计信息。

参见基数、索引、INFORMATION_SCHEMA、NULL、性能模式、持久化统计信息、主键、查询执行计划、次要索引、表、事务。

词干提取

根据共同的词根词搜索单词的不同变体的能力,例如单数和复数,或过去、现在和未来的动词时态。这个功能目前在MyISAM全文搜索功能中支持,但在InnoDB表的全文索引中不支持。

参见全文搜索、全文索引。

停用词

全文索引中,被视为常见或琐碎而在搜索索引中被省略并在搜索查询中被忽略的词。不同的配置设置控制InnoDBMyISAM表的停用词处理。详细信息请参见第 14.9.4 节,“全文停用词”。

参见全文索引、搜索索引。

存储引擎

MySQL 数据库的一个组件,负责存储、更新和查询数据的底层工作。在 MySQL 5.5 及更高版本中,InnoDB是新表的默认存储引擎,取代了MyISAM。不同的存储引擎在内存使用与磁盘使用、读取速度与写入速度、速度与稳定性等因素之间设计了不同的权衡。每个存储引擎管理特定的表,因此我们称之为InnoDB表、MyISAM表等。

MySQL 企业备份产品针对备份InnoDB表进行了优化。它也可以备份由MyISAM和其他存储引擎处理的表。

参见 InnoDB、MySQL 企业备份、表类型。

存储生成列

一个列,其值是从列定义中包含的表达式计算而来。当插入或更新行时,列值会被评估和存储。存储生成列需要存储空间并且可以被索引。

虚拟生成列相对比。

参见基本列、生成列、虚拟生成列。

存储对象

存储过程或视图。

存储过程

存储过程(过程或函数)、触发器或事件调度器事件。

存储过程

存储过程或函数。

严格模式

innodb_strict_mode选项控制的设置的通用名称。打开此设置会导致通常被视为警告的某些条件被视为错误。例如,通常会产生警告并继续使用默认值的某些无效的与文件格式行格式相关的选项组合,现在会导致CREATE TABLE操作失败。在 MySQL 5.7 中,默认情况下启用了innodb_strict_mode

MySQL 还有一种称为严格模式的东西。参见第 7.1.11 节,“服务器 SQL 模式”。

参见文件格式,innodb_strict_mode,行格式。

子列表

在代表缓冲池的列表结构中,相对较旧和相对较新的页面由列表的不同部分表示。一组参数控制这些部分的大小以及新旧页面之间的分界点。

参见缓冲池,驱逐,列表,LRU。

最大记录

在索引中的伪记录,代表该索引中最大值上方的间隙。如果一个事务有类似SELECT ... FROM ... WHERE col > 10 FOR UPDATE;的语句,并且列中的最大值为 20,则它是对最大记录的锁,阻止其他事务插入更大的值,如 50、100 等。

参见间隙,最小记录,伪记录。

代理键

合成键的同义词。

参见合成键。

合成键

通常是主键的索引列,其值是任意分配的。通常使用自增列来完成。通过将值视为完全任意,您可以避免过于严格的规则和错误的应用假设。例如,代表员工编号的数字序列可能存在间隙,如果某个员工获得批准但实际上没有加入,则可能存在间隙。或者员工编号 100 可能比员工编号 500 有更晚的入职日期,如果他们离开公司后再次加入。数字值还可以产生可预测长度的较短值。例如,存储表示“路”、“大道”、“高速公路”等含义的数字代码比一遍又一遍地重复这些字符串更节省空间。

也称为代理键。与自然键形成对比。

参见自增,自然键,主键,代理键。

系统表空间

一个或多个包含InnoDB相关对象元数据、变更缓冲区双写缓冲区存储区域的数据文件(ibdata 文件)。如果表是在系统表空间而不是每表一个文件通用表空间中创建的,则它还可能包含InnoDB表的表和索引数据。系统表空间中的数据和元数据适用于 MySQL 实例中的所有数据库

在 MySQL 5.6.7 之前,默认情况下是将所有InnoDB表和索引保存在系统表空间内,通常导致该文件变得非常庞大。由于系统表空间永远不会缩小,如果加载大量临时数据然后删除,可能会出现存储问题。在 MySQL 8.0 中,默认是每表一个文件模式,其中每个表及其关联的索引存储在单独的.ibd 文件中。这种默认设置使得更容易使用依赖于DYNAMICCOMPRESSED行格式的InnoDB功能,例如表压缩离页列的高效存储和大型索引键前缀。

将所有表数据保存在系统表空间或单独的.ibd文件中对存储管理有一般影响。MySQL 企业备份产品可能会备份一小组大文件或许多较小的文件。在具有数千个表的系统中,处理数千个.ibd文件的文件系统操作可能会导致瓶颈。

InnoDB在 MySQL 5.7.6 中引入了通用表空间,也由.ibd文件表示。通用表空间是使用CREATE TABLESPACE语法创建的共享表空间。它们可以在数据目录之外创建,能够容纳多个表,并支持所有行格式的表。

参见变更缓冲区,压缩,数据字典,数据库,双写缓冲区,动态行格式,每表一个文件,通用表空间,.ibd 文件,ibdata 文件,innodb_file_per_table,实例,MySQL 企业备份,离页列,表空间,撤销日志。

T

每个 MySQL 表都与特定的存储引擎相关联。InnoDB表具有影响性能、可扩展性备份、管理和应用程序开发的特定物理逻辑特征。

就文件存储而言,一个InnoDB表属于以下表空间类型之一:

  • 共享的InnoDB 系统表空间,由一个或多个ibdata 文件组成。

  • 一个文件-每表表空间,由一个单独的.ibd 文件组成。

  • 一个共享的通用表空间,由一个单独的.ibd文件组成。通用表空间是在 MySQL 5.7.6 中引入的。

.ibd数据文件包含表和索引数据。

在文件-每表表空间中创建的InnoDB表可以使用DYNAMICCOMPRESSED行格式。这些行格式使InnoDB功能如压缩高效存储****离页列和大索引键前缀成为可能。通用表空间支持所有行格式。

系统表空间支持使用REDUNDANTCOMPACTDYNAMIC行格式的表。系统表空间对DYNAMIC行格式的支持是在 MySQL 5.7.6 中添加的。

InnoDB表的被组织成一个称为聚簇索引的索引结构,条目根据表的主键列进行排序。数据访问被优化为过滤和排序主键列的查询,并且每个索引包含与每个条目关联的主键列的副本。修改任何主键列的值是一项昂贵的操作。因此,InnoDB表设计的一个重要方面是选择一个在最重要的查询中使用的主键,并保持主键简短,具有不经常更改的值。

参见 备份, 聚簇索引, 紧凑行格式, 压缩行格式, 压缩, 动态行格式, 快速索引创建, 文件-每表, .ibd 文件, 索引, 离页列, 主键, 冗余行格式, 行, 系统表空间, 表空间.

表锁

一种锁,阻止任何其他事务访问表。InnoDB通过使用诸如在线 DDL行锁一致性读取等技术,极力使这种锁变得不必要,用于处理DML语句和查询。您可以通过 SQL 使用LOCK TABLE语句创建这样的锁;从其他数据库系统或 MySQL 存储引擎迁移的步骤之一是在实际可行的情况下删除这些语句。

参见一致性读取,DML,锁,锁定,在线 DDL,查询,行锁,表,事务。

表扫描

参见全表扫描。

表统计信息

参见统计信息。

表类型

过时的存储引擎的同义词。我们指的是InnoDB表,MyISAM表等。

参见 InnoDB,存储引擎。

表空间

一个数据文件,可以存储一个或多个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 Cluster 也将其表组织成表空间。有关详细信息,请参见第 25.6.11.1 节,“NDB Cluster 磁盘数据对象”。

另请参阅压缩行格式,数据字典,数据文件,每表一个文件,通用表空间,索引,innodb 每表一个文件,系统表空间,表格。

Tcl

一种起源于 Unix 脚本世界的编程语言。有时会通过CC++Java编写的代码进行扩展。有关 MySQL 的开源 Tcl API,请参见第 31.12 节,“MySQL Tcl API”。

另请参阅 API。

临时表

一个表格,其数据不需要真正永久保存。例如,临时表格可能被用作复杂计算或转换中间结果的存储区域;这些中间数据在崩溃后不需要恢复。数据库产品可以采取各种捷径来提高对临时表格操作的性能,比如对数据写入磁盘不那么谨慎以及其他措施来保护数据在重新启动时的安全性。

有时,数据本身会在设定的时间自动删除,比如事务结束或会话结束时。有些数据库产品会自动删除表本身。

另请参阅表格。

临时表空间

InnoDB使用两种类型的临时表空间。会话临时表空间存储用户创建的临时表和优化器创建的内部临时表。全局临时表空间存储对用户创建的临时表所做更改的回滚段

另请参阅全局临时表空间,会话临时表空间,临时表。

文本集合

全文索引中包含的列集。

另请参阅全文索引。

TGS

一个 Kerberos 票据授权服务器。TGS 也可以指代票据授权服务器提供的票据授权服务。

另请参阅票据授权服务器。

TGT

参见票据授权票。

线程

一个通常比进程更轻量级的处理单元,允许更大的并发

另请参阅并发性,主线程,进程,Pthreads。

票据授权服务器

在 Kerberos 中,提供票据的服务器。票据授权服务器(TGS)与认证服务器(AS)组成密钥分发中心(KDC)。

TGS 也可以指代票据授予服务器提供的票据授予服务。

另请参阅认证服务器,密钥分发中心。

授予票据

在 Kerberos 中,授予票据被呈现给票据授予服务器(TGS)以获取用于服务访问的服务票据。

另请参阅票据授予服务器。

Tomcat

一个开源的J2EE应用服务器,实现了 Java Servlet 和 JavaServer Pages 编程技术。由 Web 服务器和 Java Servlet 容器组成。通常与Connector/J一起与 MySQL 一起使用。

另请参阅 J2EE。

撕裂页面

由于 I/O 设备配置和硬件故障的组合可能导致的错误条件。如果数据以小于InnoDB 页面大小(默认为 16KB)的块写出,那么在写入时发生硬件故障可能导致只有部分页面被存储到磁盘。InnoDB 双写缓冲区可防范这种可能性。

另请参阅双写缓冲区。

TPS

每秒事务”的缩写,有时在基准测试中使用的一种度量单位。其值取决于特定基准测试所代表的工作负载,以及您控制的因素,如硬件容量和数据库配置。

另请参阅事务,工作负载。

事务

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

数据库事务,由InnoDB实现,具有被称为ACID的首字母缩写的特性,即原子性、一致性、隔离性和持久性。

另请参阅 ACID,提交,隔离级别,锁,回滚。

事务 ID

与每个相关联的内部字段。此字段在INSERTUPDATEDELETE操作中物理更改,以记录哪个事务锁定了该行。

另请参阅隐式行锁,行,事务。

透明页面压缩

MySQL 5.7.8 中新增的功能,允许对驻留在按表存储表空间中的InnoDB表进行页面级压缩。通过在 CREATE TABLEALTER TABLE 中指定 COMPRESSION 属性来启用页面压缩。更多信息,请参见 Section 17.9.2, “InnoDB Page Compression”。

参见 按表存储,孔洞打孔,稀疏文件。

可传输表空间

一项允许表空间从一个实例移动到另一个实例的功能。传统上,对于InnoDB表空间,这是不可能的,因为所有表数据都是系统表空间的一部分。在 MySQL 5.6 及更高版本中,FLUSH TABLES ... FOR EXPORT 语法准备了一个InnoDB表以便复制到另一个服务器;在另一个服务器上运行 ALTER TABLE ... DISCARD TABLESPACEALTER TABLE ... IMPORT TABLESPACE 将复制的数据文件带入另一个实例。随着.ibd 文件一起复制的单独的.cfg 文件用于在导入表空间时更新表元数据(例如空间 ID)。有关使用信息,请参见 Section 17.6.1.3, “导入 InnoDB 表”。

参见 .cfg 文件,.ibd 文件,空间 ID,系统表空间,表空间。

故障排除

确定问题来源的过程。一些用于故障排除 MySQL 问题的资源包括:

  • Section 2.9.2.1, “启动 MySQL 服务器时出现问题的故障排除”

  • Section 8.2.22, “连接到 MySQL 时出现问题的故障排除”

  • Section B.3.3.2, “如何重置根密码”

  • Section B.3.2, “使用 MySQL 程序时的常见错误”

  • Section 17.21, “InnoDB 故障排除”。

截断

一个DDL操作,删除表的所有内容,同时保留表和相关索引。与drop相对。尽管概念上与没有WHERE子句的DELETE语句具有相同的结果,但在幕后操作方式不同:InnoDB创建一个新的空表,删除旧表,然后将新表重命名为旧表的位置。由于这是一个 DDL 操作,因此无法回滚

如果被截断的表包含引用另一个表的外键,则截断操作使用较慢的操作方法,逐行删除,以便根据任何ON DELETE CASCADE子句需要删除引用表中的相应行。 (MySQL 5.5 及更高版本不允许这种较慢的截断方式,如果涉及外键,则会返回错误。在这种情况下,使用DELETE语句。

查看 DDL, drop, 外键, 回滚。

信任存储库

查看 SSL。

元组

一个技术术语,表示一组有序元素。这是一个抽象概念,在数据库理论的正式讨论中使用。在数据库领域,元组通常由表行的列表示。它们也可以由查询的结果集表示,例如,仅检索表的某些列或连接表的列的查询。

查看 游标。

两阶段提交

分布式事务的一部分的操作,符合XA规范。(有时缩写为 2PC。)当多个数据库参与事务时,要么所有数据库提交更改,要么所有数据库回滚更改。

查看 提交, 回滚, 事务, XA。

U

撤销

事务的整个生命周期中维护的数据,记录所有更改,以便在回滚操作时可以撤消这些更改。它存储在撤销日志中,要么在系统表空间内(在 MySQL 5.7 或更早版本中),要么在单独的撤销表空间中。从 MySQL 8.0 开始,默认情况下,撤销日志驻留在撤销表空间中。

查看 回滚, 回滚段, 系统表空间, 事务, 撤销日志, 撤销表空间。

撤销缓冲区

查看 撤销日志。

撤销日志

一个存储区域,保存由活动事务修改的数据的副本。如果另一个事务需要查看原始数据(作为一致性读取操作的一部分),则从该存储区域检索未修改的数据。

在 MySQL 5.6 和 MySQL 5.7 中,您可以使用innodb_undo_tablespaces变量使撤销日志驻留在撤销表空间中,这些表空间可以放置在另一个存储设备上,如SSD。 在 MySQL 8.0 中,撤销日志驻留在初始化 MySQL 时创建的两个默认撤销表空间中,并且可以使用CREATE UNDO TABLESPACE语法创建额外的撤销表空间。

撤销日志被分为两个独立部分,插入撤销缓冲区更新撤销缓冲区

另请参见一致性读取,回滚段,SSD,系统表空间,事务,撤销表空间。

撤销日志段

一个撤销日志的集合。 撤销日志段存在于回滚段中。 撤销日志段可能包含来自多个事务的撤销日志。 撤销日志段一次只能被一个事务使用,但在事务提交回滚后可以重新使用。 也可以称为“撤销段”。

另请参见提交,回滚,回滚段,撤销日志。

撤销表空间

一个撤销表空间包含撤销日志。 撤销日志存在于撤销日志段中,这些段包含在回滚段中。 回滚段传统上驻留在系统表空间中。 从 MySQL 5.6 开始,回滚段可以驻留在撤销表空间中。 在 MySQL 5.6 和 MySQL 5.7 中,撤销表空间的数量由innodb_undo_tablespaces配置选项控制。 在 MySQL 8.0 中,当初始化 MySQL 实例时会创建两个默认的撤销表空间,并且可以使用CREATE UNDO TABLESPACE语法创建额外的撤销表空间。

更多信息,请参见 Section 17.6.3.4, “Undo Tablespaces”。

另请参见回滚段,系统表空间,撤销日志,撤销日志段。

Unicode

一种支持国家字符、字符集、代码页和其他国际化方面的系统,以灵活和标准化的方式支持。

Unicode 支持是ODBC标准的一个重要方面。 Connector/ODBC 5.1 是一个 Unicode 驱动程序,而 Connector/ODBC 3.51 是一个ANSI驱动程序。

参见 ANSI,Connector/ODBC,ODBC。

唯一约束

一种约束,它断言一个列不能包含任何重复值。在关系代数方面,它用于指定 1 对 1 的关系。为了有效地检查是否可以插入一个值(即该值在列中不存在),底层支持唯一索引的唯一约束。

参见约束,关系,唯一索引。

唯一索引

在具有唯一约束的列或列集上的索引。由于已知索引不包含任何重复值,因此某些种类的查找和计数操作比普通类型的索引更有效。对这种类型的索引的大多数查找只是为了确定某个值是否存在。索引中的值数量与表中的行数相同,或者至少与相关列的非空值的行数相同。

更改缓冲优化不适用于唯一索引。作为解决方法,您可以在将数据大量加载到InnoDB表时,临时将unique_checks=0设置为 0。

参见基数,更改缓冲,唯一约束,唯一键。

唯一键

由一个或多个列组成的唯一索引集。当您可以定义一个匹配恰好一行的WHERE条件,并且查询可以使用相关的唯一索引时,查找和错误处理可以非常高效地执行。

参见基数,唯一约束,唯一索引。

UPN

参见用户主体名称。

用户主体名称

代表用户的 Kerberos 命名实体的名称。

参见主体。

V

变长类型

变长数据类型。VARCHARVARBINARYBLOBTEXT类型是变长类型。

InnoDB将长度大于或等于 768 字节的固定长度字段视为可存储在离页的变长字段。例如,如果字符集的最大字节长度大于 3,例如utf8mb4,那么CHAR(255)列可以超过 768 字节。

参见离页列,溢出页。

受害者

当检测到死锁时,自动选择要回滚事务InnoDB会回滚更新了最少行的事务。

可以使用innodb_deadlock_detect配置选项来禁用死锁检测

另请参见死锁,死锁检测,innodb_lock_wait_timeout,事务。

视图

一个存储的查询,调用时会产生一个结果集。视图充当虚拟表。

虚拟列

参见虚拟生成列。

虚拟生成列

一个列,其值是从列定义中包含的表达式计算出来的。列值不会被存储,而是在读取行时立即计算,紧随任何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命令的输出或性能模式来确定线程是否花费过多时间在等待上,以及如何改善并发性

参见并发性,闩锁,锁,互斥体,性能模式,自旋。

热备份

在数据库运行时进行的备份,但在备份过程中限制了一些数据库操作。例如,表可能变为只读。对于繁忙的应用程序和网站,您可能更喜欢热备份

参见 backup,cold backup,hot backup。

预热

在启动后的一段时间内运行系统以模拟典型工作负载,以便缓冲池和其他内存区域填充,就像在正常情况下一样。当 MySQL 服务器重新启动或受到新的工作负载时,这个过程会自然发生。

通常,在运行性能测试之前,您需要运行一段时间的工作负载来预热缓冲池,以确保多次运行时结果一致;否则,在第一次运行期间性能可能人为降低。

在 MySQL 5.6 中,您可以通过启用innodb_buffer_pool_dump_at_shutdowninnodb_buffer_pool_load_at_startup配置选项来加快预热过程,以在重新启动后将缓冲池的内容重新加载到内存中。这些选项在 MySQL 5.7 中默认启用。参见第 17.8.3.6 节,“保存和恢复缓冲池状态”。

参见 buffer pool,workload。

工作负载

数据库应用程序在典型或高峰使用期间执行的SQL和其他数据库操作的组合和数量。您可以在性能测试期间使数据库受特定工作负载以识别瓶颈,或在容量规划期间进行。

参见 bottleneck,CPU-bound,disk-bound,SQL。

写合并

一种优化技术,当脏页InnoDB 缓冲池刷新时,减少写操作。如果页面中的行被多次更新,或者同一页上的多行被更新,所有这些更改都将存储到数据文件中的单个写操作中,而不是每个更改都写一次。

参见 buffer pool,dirty page,flush。

X

XA

一个标准的接口,用于协调分布式事务,允许多个数据库参与事务同时保持ACID兼容性。有关详细信息,请参见第 15.3.8 节,“XA 事务”。

XA 分布式事务支持默认启用。

另请参见 ACID, binary log, commit, transaction, two-phase commit.

Y

年轻的

InnoDB 缓冲池中的页面的特征,意味着它最近被访问过,并且在缓冲池数据结构内移动,以便不会被LRU算法过早刷新。这个术语在与缓冲池相关的一些INFORMATION_SCHEMA表的列名中使用。

另请参见 buffer pool, flush, INFORMATION_SCHEMA, LRU, page.

posted @ 2024-06-23 16:29  绝不原创的飞龙  阅读(2)  评论(0编辑  收藏  举报