这些术语常用于有关 MySQL 数据库服务器的信息中。这个词汇表最初是作为 InnoDB 存储引擎术语的参考,大部分定义都是与 InnoDB 相关的。
一个
- .ARM文件
表的元数据
ARCHIVE
。与 .ARZ 文件对比。具有此扩展名的文件始终包含在由 MySQL Enterprise Backup 产品 的mysqlbackup
命令生成的 备份中。- .ARZ文件
ARCHIVE 表的数据。对比 .ARM 文件。具有此扩展名的文件始终包含在由 MySQL Enterprise Backup 产品 的
mysqlbackup
命令生成的 备份中。- 酸
代表原子性、一致性、隔离性和持久性的首字母缩写词。这些属性都是数据库系统所需要的,并且都与事务的概念紧密相关 。事务特性
InnoDB
遵循 ACID 原则。事务是可以提交 或回滚的原子工作单元。当一个事务对数据库进行多次更改时,要么在事务提交时所有更改都成功,要么在事务回滚时所有更改都撤消。
数据库始终保持一致的状态——在每次提交或回滚之后,以及事务正在进行时。如果跨多个表更新相关数据,查询将看到所有旧值或所有新值,而不是新旧值的混合。
交易在进行时相互保护(隔离);它们不能相互干扰或查看彼此未提交的数据。这种隔离是通过锁定机制实现的。有经验的用户可以调整隔离级别,牺牲较少的保护以提高性能和 并发性,前提是他们可以确定事务确实不会相互干扰。
事务的结果是持久的:一旦提交操作成功,该事务所做的更改就不会出现电源故障、系统崩溃、竞争条件或许多非数据库应用程序容易受到的其他潜在危险。持久性通常涉及写入磁盘存储,具有一定数量的冗余以防止写入操作期间出现电源故障或软件崩溃。(在
InnoDB
中,双写缓冲区有助于持久性。)- 自适应冲洗
InnoDB表 的一种算法,可以消除检查点引入的 I/O 开销 。MySQL不是 立即将 缓冲池中的所有修改 页面刷新到 数据文件,而是定期刷新一小组修改页面。自适应刷新算法通过根据刷新速率和生成重做信息 的速度估计执行这些周期性刷新的最佳速率来扩展此过程 。
- 自适应哈希索引
通过在内存中构建 散列索引, 对表进行优化,可以使用和 运算符
InnoDB
加快查找速度。MySQL 监视表的索引搜索,如果查询可以从哈希索引中受益,它会自动为 经常访问的索引页构建一个索引。从某种意义上说,自适应哈希索引在运行时配置 MySQL 以利用充足的主内存,更接近主内存数据库的体系结构。此功能由=
IN
InnoDB
innodb_adaptive_hash_index
配置选项。由于此功能有利于某些工作负载而不是其他工作负载,并且用于哈希索引的内存保留在缓冲池中,因此通常您应该启用和禁用此功能进行基准测试。散列索引始终基于表上现有的 B 树索引构建。MySQL 可以在为 B 树定义的键的任意长度的前缀上构建哈希索引,具体取决于针对索引的搜索模式。哈希索引可以是部分的;整个 B-tree 索引不需要缓存在缓冲池中。
在 MySQL 5.6 及更高版本中,另一种利用
InnoDB
表的快速单值查找的方法是使用InnoDB
memcached插件。有关详细信息,请参阅 第 14.21 节,“InnoDB memcached 插件”。- ADO.NET
一种对象关系映射 (ORM) 框架,适用于使用 .NET 技术(如 ASP.NET )构建的应用程序。这样的应用程序可以通过Connector/NET组件 与 MySQL 交互 。
- 一体机
异步 I/O 的缩写。您可能会在
InnoDB
消息或关键字中看到此首字母缩略词。另请参阅异步 I/O。
- 美标
在ODBC中,支持字符集和其他国际化方面的替代方法。与Unicode对比。 Connector/ODBC 3.51 是一个 ANSI 驱动程序,而 Connector/ODBC 5.1 是一个 Unicode 驱动程序。
- 羚羊
InnoDB
原始文件格式 的代号。它支持 REDUNDANT和 COMPACT行格式,但不支持Barracuda文件格式 中可用的较新的DYNAMIC和 COMPRESSED行格式。另请参见Barracuda、紧凑行格式、压缩行格式、动态行格式、文件格式、innodb_file_format、冗余行格式。
- 应用程序接口
API 提供从客户端程序 对 MySQL 协议和 MySQL 资源的低级访问。与Connector提供的更高级别的访问对比 。
另请参阅C API、客户端、连接器、本机 C API、Perl API、PHP API、Python API、Ruby API。
- 应用程序编程接口 (API)
- 申请
当MySQL Enterprise Backup产品生成的备份不包括备份进行时发生的最新更改时,更新备份文件以包括这些更改的过程称为应用步骤。它由命令的
apply-log
选项 指定mysqlbackup
。在应用更改之前,我们将文件称为 原始备份。应用更改后,我们将这些文件称为 准备好的备份。更改记录在 ibbackup_logfile文件中;应用步骤完成后,不再需要此文件。
- 网站
使用 .NET技术和语言开发基于 Web 的应用程序的框架。这样的应用程序可以通过Connector/NET组件 与 MySQL 交互。
另一种用 MySQL 编写服务器端网页的技术是PHP。
- 部件
.NET系统 中的已编译代码库 ,可通过 Connector/NET访问。存储在 GAC中以允许在没有命名冲突的情况下进行版本控制。
- 异步输入输出
一种 I/O 操作类型,允许在 I/O 完成之前继续进行其他处理。也称为 非阻塞 I/O,缩写为AIO。
InnoDB
将这种类型的 I/O 用于某些可以并行运行而不影响数据库可靠性的操作,例如将 实际未被请求但可能很快需要 的页面读入缓冲池。过去,
InnoDB
仅在 Windows 系统上使用异步 I/O。从 InnoDB Plugin 1.1 和 MySQL 5.5 开始,InnoDB
在 Linux 系统上使用异步 I/O。此更改引入了对libaio
. Linux 系统上的异步 I/O 是使用innodb_use_native_aio
默认启用的选项配置的。在其他类 Unix 系统上,InnoDB 仅使用同步 I/O。- 原子
在 SQL 上下文中, 事务是完全成功( 提交时)或完全无效(回滚时)的工作单元。事务的不可分割(“原子”)属性是 首字母缩写词 ACID中的“ A ”。
- 原子 DDL
原子DDL语句将数据字典更新、 存储引擎操作和 与 DDL 操作关联的二进制日志写入组合到单个原子事务中。事务完全提交或回滚,即使服务器在操作期间停止也是如此。MySQL 8.0 中添加了原子 DDL 支持。有关详细信息,请参阅原子数据定义语句支持。
- 原子指令
- 自动递增
表列(由关键字指定)的一种属性,
AUTO_INCREMENT
它会自动在列中添加值的升序序列。它为开发人员节省了工作,在插入新行时不必生成新的唯一值。它为查询优化器提供了有用的信息,因为已知该列不为空且具有唯一值。此类列中的值可用作各种上下文中的查找键,并且由于它们是自动生成的,因此没有理由更改它们;出于这个原因,主键列通常被指定为自动递增。
自动增量列对于基于语句的复制可能会有问题,因为由于计时问题,在副本上重放语句可能不会产生与源上相同的列值集。当你有一个自动递增的主键时,你只能使用设置为 statement-based 的复制
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 语句之后 导致提交操作的设置。不建议将此模式用于处理具有 跨越多个语句的事务的表 。它可以帮助提高 表上 只读事务的性能,从而最大限度地减少锁定和生成 撤消数据的开销,尤其是在 MySQL 5.6.4 及更高版本中。它也适用于处理 不适用事务的表。
InnoDB
InnoDB
MyISAM
- 可用性
处理主机故障并在必要时从中恢复的能力,包括 MySQL、操作系统或硬件故障以及可能导致停机的维护活动。通常与 可扩展性一起作为大规模部署的关键方面。
另见可扩展性。
乙
- B树
常用于数据库索引的树数据结构。该结构始终保持排序,支持快速查找精确匹配(等于运算符)和范围(例如,大于、小于和
BETWEEN
运算符)。这种类型的索引适用于大多数存储引擎,例如InnoDB
和MyISAM
。因为 B 树节点可以有很多子节点,所以 B 树与二叉树不同,二叉树每个节点只能有 2 个子节点。
与仅在 存储引擎中可用的哈希索引相对。
MEMORY
存储引擎也可以使用MEMORY
B-tree索引,MEMORY
如果某些查询使用范围操作符,你应该为表选择B-tree索引。术语 B 树的使用旨在作为索引设计的一般类别的参考。由于经典 B 树设计中不存在的复杂性,MySQL 存储引擎使用的 B 树结构可能被视为变体。相关信息参考MySQL Internals Manual
InnoDB
的Page Structure Fil Header部分 。另见散列索引。
- 反引号
`
MySQL SQL 语句中的标识符如果包含特殊字符或保留字,则 必须使用反引号 ( ) 引起来。例如,要引用名为 的表FOO#BAR
或名为 的列SELECT
,您可以将标识符指定为`FOO#BAR`
和`SELECT`
。由于反引号提供了额外的安全级别,因此它们被广泛用于程序生成的 SQL 语句中,其中标识符名称可能事先不知道。"
许多其他数据库系统在此类特殊名称周围 使用双引号 ( )。为了可移植性,您可以ANSI_QUOTES
在 MySQL 中启用模式并使用双引号而不是反引号来限定标识符名称。另见SQL。
- 备份
为了安全起见,从 MySQL 实例复制部分或全部表数据和元数据的过程。也可以参考复制文件的集合。这是 DBA 的一项重要任务。这个过程的逆过程是恢复 操作。
使用MySQL,物理备份 由MySQL Enterprise Backup产品执行,逻辑备份由
mysqldump
命令执行。这些技术在备份数据的大小和表示以及速度(尤其是恢复操作的速度)方面具有不同的特征。备份根据它们对正常数据库操作的干扰 程度进一步分为 热、 暖或 冷。(热备份干扰最少,冷备份干扰最大。)
- 梭子鱼
支持 启用 InnoDB 表压缩 的COMPRESSED行格式和改进长可变长度列的存储布局 的DYNAMIC行格式的
InnoDB
文件格式 的代码名称。MySQL Enterprise Backup 产品 3.5 及以上版本支持备份使用 Barracuda 文件格式的表空间 。
另请参见Antelope、紧凑行格式、压缩行格式、动态行格式、文件格式、file-per-table、通用表空间、innodb_file_format、MySQL Enterprise Backup、行格式、系统表空间。
- 基列
- 贝塔
软件产品生命周期的早期阶段,此时仅可用于评估,通常没有明确的版本号或版本号小于 1。
InnoDB
不使用 beta 名称,更喜欢 可以扩展几个点的早期采用者阶段发布,导致 GA发布。- 二进制日志
包含所有试图更改表数据的语句或行更改的记录的文件。可以重放二进制日志的内容,以便在 复制场景中使副本保持最新状态,或者在从备份恢复表数据后使数据库保持最新状态。二进制日志功能可以打开和关闭,但 Oracle 建议在使用复制或执行备份时始终启用它。
您可以使用mysqlbinlog命令 检查二进制日志的内容,或在复制或恢复期间重播它 。有关二进制日志的完整信息,请参阅第 5.4.4 节,“二进制日志”。对于与二进制日志相关的 MySQL 配置选项,请参阅 第 16.1.6.4 节,“二进制日志记录选项和变量”。
对于MySQL Enterprise Backup 产品,二进制日志的文件名和文件中的当前位置是重要的细节。要在复制上下文中进行备份时为源记录此信息,您可以指定该
--slave-info
选项。在 MySQL 5.0 之前,有一个类似的功能可用,称为更新日志。在 MySQL 5.0 及更高版本中,二进制日志取代了更新日志。
另见二进制日志、MySQL 企业备份、复制。
- 二进制日志
二进制日志文件 的非正式名称。例如,您可能会在电子邮件或论坛讨论中看到此缩写。
另见二进制日志。
- 盲查询扩展
由子句启用的 一种特殊的全文搜索模式。
WITH QUERY EXPANSION
它执行两次搜索,其中第二次搜索的搜索短语是原始搜索短语与第一次搜索中几个最相关的文档连接而成。这种技术主要适用于简短的搜索短语,也许只有一个单词。它可以发现文档中未出现精确搜索词的相关匹配项。另请参阅全文搜索。
- BLOB
SQL 数据类型(
TINYBLOB
、BLOB
、MEDIUMBLOB
和LONGBLOB
),用于包含任意大小的任何类型的二进制数据的对象。用于存储文档、图像、声音文件和其他类型的信息,这些信息不能轻易分解为 MySQL 表中的行和列。在 MySQL 应用程序中处理 BLOB 的技术因每个 连接器和 API而异。MySQLConnector/ODBC
将BLOB
值定义为LONGVARBINARY
. 对于大型、自由形式的字符数据集合,行业术语是 CLOB,由 MySQLTEXT
数据类型表示。- 瓶颈
系统的一部分在大小或容量上受到限制,具有限制总吞吐量的效果。例如,内存区域可能比需要的要小;访问单个所需资源可能会阻止多个 CPU 内核同时运行;或者等待磁盘 I/O 完成可能会阻止 CPU 满负荷运行。消除瓶颈往往会提高 并发性。例如,当多个会话同时读取和写入缓冲池时 ,拥有多个
InnoDB
缓冲池实例的能力减少了争用。- 弹跳
关机操作后立即重启 。理想情况下,预热时间相对较短,以便性能和吞吐量迅速恢复到较高水平。
另见关机。
- 伙伴分配器
- 缓冲
用于临时存储的内存或磁盘区域。数据缓冲在内存中,以便可以通过一些大的 I/O 操作而不是许多小的 I/O 操作有效地将数据写入磁盘。数据缓冲在磁盘上以获得更高的可靠性,因此即使在最坏的可能时间发生崩溃或其他故障也可以恢复数据 。InnoDB 使用的主要缓冲区类型是缓冲池、 双写缓冲区和 更改缓冲区。
- 缓冲池
InnoDB
保存表和索引 缓存数据的内存区域。为了提高大容量读取操作的效率,缓冲池被分成 可能包含多行的页面。为了缓存管理的效率,缓冲池被实现为页面链表;使用LRU算法的变体,很少使用的数据会从缓存中老化 。在具有大内存的系统上,您可以通过将缓冲池划分为多个缓冲池实例来提高并发性。几个
InnoDB
状态变量、INFORMATION_SCHEMA
表格和performance_schema
表格有助于监视缓冲池的内部工作。从 MySQL 5.6 开始,您可以通过在服务器关闭时保存缓冲池状态并在服务器启动时将缓冲池恢复到相同状态来避免重新启动服务器后漫长的预热期,特别是对于具有大型缓冲池的实例。请参阅 第 14.8.3.6 节,“保存和恢复缓冲池状态”。- 缓冲池实例
缓冲池可以划分 成的多个区域中的任何一个 ,由
innodb_buffer_pool_instances
配置选项控制。指定的总内存大小innodb_buffer_pool_size
在所有缓冲池实例之间分配。通常,具有多个缓冲池实例适用于将多个 GB 分配给InnoDB
缓冲池的系统,每个实例为 1 GB 或更大。在从许多并发会话加载或查找缓冲池中的大量数据的系统上,拥有多个缓冲池实例可以减少对管理缓冲池的数据结构的独占访问的争用。另见缓冲池。
- 内置
MySQL内置的
InnoDB
存储引擎是存储引擎的原始分布形式。与InnoDB Plugin对比。从 MySQL 5.5 开始,InnoDB 插件作为内置InnoDB
存储引擎(称为 InnoDB 1.1)合并回 MySQL 代码库。这种区别主要在 MySQL 5.1 中很重要,其中功能或错误修复可能适用于 InnoDB 插件,但不适用于内置插件
InnoDB
,反之亦然。另见InnoDB。
- 商业规则
构成商业软件基础的行为关系和顺序,用于运营一家商业公司。有时,这些规则由法律规定,有时则由公司政策规定。仔细规划可确保数据库编码和强制执行的关系以及通过应用程序逻辑执行的操作准确反映公司的真实政策并能够处理现实生活中的情况。
例如,一名员工离开公司可能会触发人力资源部门采取一系列行动。人力资源数据库可能还需要灵活性来表示有关已被雇用但尚未开始工作的人员的数据。在在线服务上关闭帐户可能会导致数据从数据库中删除,或者数据可能会被移动或标记,以便在重新打开帐户时可以恢复数据。公司可能会制定有关工资最高、最低和调整的政策,以及基本的合理性检查(例如工资不是负数)。零售数据库可能不允许多次退回具有相同序列号的购买,
另见关系。
C
- .cfg 文件
InnoDB
与可传输表空间 功能 一起使用的元数据文件。它由命令生成FLUSH TABLES ... FOR EXPORT
,将一个或多个表置于可以复制到另一台服务器的一致状态。该.cfg
文件与相应的.ibd 文件一起复制,并用于在步骤中调整文件的内部值 ,.ibd
例如 空间 IDALTER TABLE ... IMPORT TABLESPACE
。- C
一种结合了可移植性和性能以及对低级硬件功能的访问的编程语言,使其成为编写操作系统、驱动程序和其他类型的系统软件的流行选择。许多复杂的应用程序、语言和可重用模块的特点是用 C 编写的部分,与用其他语言编写的高级组件捆绑在一起。C++、 Java和 C#开发人员 熟悉其核心语法 。
- 语言接口
C API代码随 MySQL 一起分发。它包含在 libmysqlclient库中,使C程序能够访问数据库。
另见API、C、libmysqlclient。
- C#
一种结合了强类型和面向对象特性的编程语言,在 Microsoft .NET框架或其开源版本Mono中运行。通常用于使用 ASP.net框架创建应用程序。C、 C++和 Java开发人员熟悉它的语法。
- C++
一种具有C开发人员 熟悉的核心语法的编程语言 。提供对低级操作的访问以提高性能,并结合高级数据类型、面向对象的功能和垃圾收集。要为 MySQL 编写 C++ 应用程序,您可以使用 Connector/C++组件。
- 缓存
- 基数
表 列中不同值的数量。当查询引用具有关联 索引的列时,每列的基数会影响哪种访问方法最有效。例如,对于具有唯一约束的列,不同值的数量等于表中的行数。如果一个表有 100 万行,但特定列只有 10 个不同的值,则每个值(平均)出现 100,000 次。这样的查询
SELECT c1 FROM t1 WHERE c1 = 50;
可能会返回 1 行或大量行,并且数据库服务器可能会根据c1
.如果列中的值分布非常不均匀,则基数可能不是确定最佳查询计划的好方法。例如,
SELECT c1 FROM t1 WHERE c1 = x;
可能会在 时返回 1 行,x=50
而在 时可能会返回一百万行x=30
。在这种情况下,您可能需要使用索引提示 来传递有关哪种查找方法对特定查询更有效的建议。基数也可以应用于多个列中存在的不同值的数量,如在 复合索引中。
- 更改缓冲区
一种特殊的数据结构,用于记录二级索引中页面的 更改 。这些值可能来自 SQL 、 或 语句 ( DML )。涉及更改缓冲区的一组功能统称为 更改缓冲区,包括 插入缓冲区、 删除缓冲区和 清除缓冲区。
INSERT
UPDATE
DELETE
只有当来自二级索引的相关页面不在 缓冲池中时,更改才会记录在更改缓冲区中。当相关的索引页面被带入缓冲池,而关联的更改仍在更改缓冲区中时,该页面的更改将使用更改缓冲区中的数据应用到缓冲池中(合并)。周期性地, 在系统大部分空闲或缓慢关闭期间运行的清除操作将新索引页写入磁盘。与立即将每个值写入磁盘相比,清除操作可以更有效地为一系列索引值写入磁盘块。
在物理上,更改缓冲区是 系统表空间的一部分,因此索引更改在数据库重新启动时保持缓冲状态。只有当页面由于某些其他读取操作而被带入缓冲池时, 才会应用(合并)更改。
更改缓冲区中存储的数据种类和数量由
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
时,一种检测损坏的验证机制。此功能由 MySQL 5.5 中的配置选项控制。 在 MySQL 5.6.3 中已弃用,替换为 .InnoDB
innodb_checksums
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
andON DELETE
子句的表。父表中的相应行必须存在,然后才能在子表中创建该行。ON CASCADE
根据创建外键时使用 的选项,子表中的值可以阻止对父表的删除或更新操作,或者可以导致子表中的自动删除或更新。- 干净的页面
缓冲池中的 一个页面, 其中在内存中所做的所有更改也已写入(刷新)到 数据文件中。与脏页相反。
InnoDB
- 干净关机
- 客户
在数据库服务器外部运行的程序,通过连接器发送请求或 通过 客户端库提供的API 与数据库通信 。它可以与数据库服务器运行在同一台物理机器上,也可以运行在通过网络连接的远程机器上。它可以是专用数据库应用程序,也可以是像mysql命令行处理器 这样的通用程序 。
- 客户端库
包含用于处理数据库的函数集合的文件。通过使用这些库编译您的程序,或将它们安装在与您的应用程序相同的系统上,您可以在未安装 MySQL 服务器的机器上运行数据库应用程序(称为 客户端);应用程序通过网络访问数据库。对于 MySQL,您可以使用 MySQL 服务器本身的 libmysqlclient库。
- 客户端准备好的语句
一种在本地管理缓存和重用的准备语句 ,模拟服务器端准备语句的功能。过去,一些 Connector/J、 Connector/ODBC和 Connector/PHP开发人员使用它来解决服务器端存储过程的问题。对于现代 MySQL 服务器版本,建议使用服务器端准备好的语句来提高性能、可伸缩性和内存效率。
另见Connector/J、Connector/ODBC、Connector/PHP、prepared statement。
- CLOB
SQL 数据类型(
TINYTEXT
、TEXT
、MEDIUMTEXT
或LONGTEXT
),用于包含任意大小的任何类型字符数据的对象。用于存储基于文本的文档,以及相关的字符集和整理顺序。在 MySQL 应用程序中处理 CLOB 的技术因每个 连接器和 API而异。MySQL 连接器/ODBC 将TEXT
值定义为LONGVARCHAR
. 对于存储二进制数据,等效于BLOB类型。- 聚集索引
主键索引 的
InnoDB
术语 。表存储是根据主键列的值来组织的,以加快涉及主键列的查询和排序。为获得最佳性能,请根据性能最关键的查询仔细选择主键列。因为修改聚集索引的列是一项昂贵的操作,所以选择很少或从不更新的主列。InnoDB
在 Oracle 数据库产品中,这种类型的表称为索引组织表。
- 冷备份
- 柱子
行中 的数据项,其存储和语义由数据类型定义。每个 表和 索引主要由它包含的列集定义。
每列都有一个基 数值。列可以是其表的主键,也可以是主键的一部分。列可以受唯一约束、NOT NULL 约束或两者的约束。不同列中的值,甚至跨不同表的值,都可以通过 外键关系进行链接。
在 MySQL 内部操作的讨论中,有时 将字段用作同义词。
- 列索引
- 列前缀
当使用长度规范(例如 )创建索引
CREATE INDEX idx ON t1 (c1(N))
时,只有列值的前 N 个字符存储在索引中。保持索引前缀较小可使索引紧凑,内存和磁盘 I/O 节省有助于提高性能。(虽然使索引前缀太小可能会阻碍查询优化,因为查询优化器会认为具有不同值的行是重复的。)对于包含二进制值或长文本字符串的列,排序不是主要考虑因素并且将整个值存储在索引中会浪费空间,索引会自动使用值的前 N 个(通常为 768 个)字符进行查找和排序。
另见索引。
- 命令拦截器
语句拦截器 的同义词。拦截器设计模式的一个方面 可用于Connector/NET和 Connector/J。Connector/NET 称之为命令,Connector/J 称之为语句。与异常拦截器对比 。
- 犯罪
结束事务 的SQL语句, 使事务所做的任何更改永久化。它与回滚相反, 回滚会撤消事务中所做的任何更改。
InnoDB
使用 乐观的提交机制,以便可以在实际发生提交之前将更改写入数据文件。这种技术使提交本身更快,但代价是在回滚的情况下需要做更多的工作。默认情况下,MySQL 使用 自动提交设置,它会在每个 SQL 语句之后自动发出提交。
- 紧凑的行格式
从 MySQL 5.0.3 到 MySQL 5.7.8 的 InnoDB 表的默认
InnoDB
行格式。从 MySQL 5.7.9 开始,默认行格式由innodb_default_row_format
配置选项定义,默认设置为 DYNAMIC。COMPACT行格式为空值和可变长度列提供了比先前默认(REDUNDANT行格式) 更紧凑的 表示。有关
InnoDB
COMPACT
行格式的其他信息,请参阅 第 14.11 节,“InnoDB 行格式”。- 综合指数
另见索引。
- 压缩备份
MySQL Enterprise Backup产品 的压缩功能为每个表空间创建一个压缩副本,将扩展名
.ibd
从.ibz
. 压缩备份数据使您可以保留更多备份,并减少将备份传输到不同服务器的时间。数据在还原操作期间未压缩。当压缩备份操作处理一个已经压缩的表时,它会跳过该表的压缩步骤,因为再次压缩会导致很少或根本不会节省空间。一组由MySQL Enterprise Backup产品生成的文件,其中每个 表空间都经过压缩。压缩文件以
.ibz
文件扩展名重命名。在备份过程开始时应用压缩有助于避免压缩过程中的存储开销,并避免将备份文件传输到另一台服务器时的网络开销。应用二进制日志的 过程耗时较长,并且需要解压备份文件。
- 压缩行格式
为 表启用数据和索引压缩 的行格式。它是在 插件中引入的,作为 Barracuda文件格式的一部分提供。大字段存储在远离包含其余行数据的页面的地方,如动态行格式。索引页和大字段都被压缩,从而节省了内存和磁盘。根据数据的结构,内存和磁盘使用量的减少可能会或可能不会超过在使用数据时解压缩数据的性能开销。见 第 14.9 节,“InnoDB 表和页面压缩”
InnoDB
InnoDB
了解使用详情。有关
InnoDB
COMPRESSED
行格式的其他信息,请参阅 动态行格式。- 压缩表
以压缩形式存储数据的表。对于
InnoDB
,它是用 创建的表ROW_FORMAT=COMPRESSED
。有关更多信息,请参阅 第 14.9 节,“InnoDB 表和页面压缩”。- 压缩
使用更少的磁盘空间、执行更少的 I/O 以及使用更少的缓存内存具有广泛优势的功能。
InnoDB
支持表级和页级压缩。InnoDB
页面压缩也称为 透明页面压缩。有关InnoDB
压缩的更多信息,请参阅第 14.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 在何处搜索配置文件的信息 , 请参阅第 4.2.2.2 节,“使用选项文件” 。
当您使用MySQL Enterprise Backup产品时,您通常使用两个配置文件:一个指定数据的来源和结构(可能是您服务器的原始配置文件),另一个精简的只包含一小组选项,指定备份数据的去向和结构。用于 MySQL Enterprise Backup产品的配置文件必须包含某些通常不包含在常规配置文件中的选项,因此您可能需要将选项添加到现有配置文件以用于 MySQL Enterprise Backup。
- 联系
应用程序和 MySQL 服务器之间的通信通道。数据库应用程序的性能和可伸缩性受建立数据库连接的速度、可以同时建立的数量以及它们持续多长时间的影响。主机、 端口等参数在 Connector/NET中表示为连接字符串,在 Connector/ODBC中表示为 DSN。高流量系统使用称为 连接池的优化。
- 连接池
允许在同一应用程序或不同应用程序之间重复使用数据库连接 的缓存区域 ,而不是为每个数据库操作设置和拆除新连接。这种技术在J2EE应用程序服务器 中很常见 。使用Connector/J的Java应用程序 可以使用Tomcat和其他应用程序服务器的连接池功能 。重用对应用程序是透明的;该应用程序仍然像往常一样打开和关闭连接。
- 连接串
数据库 连接参数的表示,编码为字符串文字,以便可以在程序代码中使用。字符串的部分表示连接参数,例如 host和 port。连接字符串包含多个键值对,以分号分隔。每个键值对都用等号连接。经常与连接器/NET应用程序一起使用;有关详细信息,请参阅 创建连接器/NET 连接字符串。
- 连接器
MySQL 连接器为 客户端程序提供到 MySQL 服务器的连接。几种编程语言和框架都有自己的关联连接器。与API提供的低级别访问对比。
- 连接器/C++
Connector/C++ 8.0 可用于访问实现 文档存储的 MySQL 服务器,或以传统方式使用 SQL 查询。它支持使用 X DevAPI 开发 C++ 应用程序,或使用适用于 C 的 X DevAPI 开发纯 C 应用程序。它还支持开发使用 Connector/C++ 1.1 中基于 JDBC 的遗留 API 的 C++ 应用程序。有关详细信息,请参阅MySQL 连接器/C++ 8.0 开发人员指南。
- 接头/J
为使用Java编程语言开发的客户端 应用程序 提供连接 的JDBC驱动程序。提供了与 JDBC 3.0 和 JDBC 4.0 规范兼容的不同版本。MySQL Connector/J 是一个 JDBC Type 4 驱动程序:MySQL 协议的纯 Java 实现,不依赖于 MySQL 客户端库。有关完整详细信息,请参阅MySQL Connector/J 8.0 开发人员指南。
- 连接器/网络
一个 MySQL连接器,供开发人员使用C#、. NET、 Mono、 Visual Studio、 ASP.net和 ADO.net等语言、技术和框架编写应用程序。
- 连接器/ODBC
MySQL ODBC 驱动程序系列,使用行业标准开放式数据库连接 ( ODBC ) API 提供对 MySQL 数据库的访问。以前称为 MyODBC 驱动程序。有关完整详细信息,请参阅 MySQL 连接器/ODBC 开发人员指南。
- 连接器/PHP
- 一致性读取
一种读取操作,它使用 快照信息根据时间点呈现查询结果,而不管同时运行的其他事务执行的更改。如果查询到的数据已经被另一个事务更改,则根据 undo log的内容重建原始数据。这种技术通过强制事务等待其他事务完成来 避免一些可能会降低并发性的锁定问题。
使用REPEATABLE READ 隔离级别,快照基于执行第一次读取操作的时间。使用READ COMMITTED隔离级别,快照将重置为每个一致读取操作的时间。
一致读取是默认模式,在该模式下
InnoDB
处理处于READ COMMITTED 和REPEATABLE READ隔离级别SELECT
的语句。因为一致读取不会在它访问的表上设置任何锁,所以其他会话可以在对表执行一致读取时自由修改这些表。有关适用的隔离级别的技术细节,请参阅 第 14.7.2.3 节,“一致的非锁定读取”。
- 约束
一种可以阻止数据库更改以防止数据变得不一致的自动测试。(在计算机科学术语中,一种与不变条件相关的断言。)约束是 ACID哲学的重要组成部分,用于保持数据一致性。MySQL 支持的约束包括 FOREIGN KEY 约束和 唯一约束。
- 柜台
由特定类型的
InnoDB
操作递增的值。对于测量服务器的繁忙程度、排除性能问题的根源以及测试更改(例如,对查询使用的配置设置或索引)是否具有所需的低级效果很有用。通过Performance Schema表和 INFORMATION_SCHEMA表可以使用不同种类的计数器,尤其是INFORMATION_SCHEMA.INNODB_METRICS
.另请参见INFORMATION_SCHEMA、指标计数器、性能模式。
- 覆盖指数
包含查询检索到的所有列 的索引。查询不使用索引值作为指针来查找完整的表行,而是从索引结构返回值,从而节省磁盘 I/O。
InnoDB
可以将此优化技术应用于比 MyISAM 更多的索引,因为InnoDB
二级索引还包括 主键列。InnoDB
在该事务结束之前,不能将此技术应用于对事务修改的表的查询。如果查询正确,任何列索引或 复合索引都可以充当覆盖索引。设计索引和查询以尽可能利用此优化技术。
- 受CPU限制
- 碰撞
MySQL 使用术语“崩溃”来泛指 服务器无法进行正常清理的任何意外关闭操作。例如,数据库服务器机器或存储设备上的硬件故障可能会导致崩溃;电源故障;导致 MySQL 服务器停止的潜在数据不匹配;由 DBA 启动的 快速关闭;或许多其他原因。InnoDB表的强大、自动 崩溃恢复可 确保在服务器重新启动时数据保持一致,而无需 DBA 进行任何额外工作。
- 崩溃恢复
MySQL 在崩溃 后再次启动时发生的清理活动。对于 InnoDB表,使用重做日志中的数据重放来自未完成事务的更改 。崩溃前提交但尚未写入数据文件的更改 将从双写缓冲区重建 。当数据库正常关闭时,这种类型的活动在关闭期间由 清除操作执行。
在正常操作期间,提交的数据可以在写入数据文件之前在 更改缓冲区中存储一段时间。在保持数据文件最新和缓冲数据之间始终存在权衡,前者在正常操作期间引入了性能开销,后者可能使关机和崩溃恢复需要更长的时间。
- 增删改查
“创建、读取、更新、删除”的 首字母缩写词,是数据库应用程序中的常见操作序列。通常表示一类数据库使用相对简单(基本的DDL、 DML和 SQL中的查询语句 ),可以用任何语言快速实现的一类应用程序。
- 光标
表示 SQL 语句结果集的内部 MySQL 数据结构。通常与 准备好的语句和 动态 SQL一起使用。它的工作方式类似于其他高级语言中的迭代器,根据请求从结果集中生成每个值。
虽然 SQL 通常会为您处理游标,但在处理性能关键代码时您可能会深入研究其内部工作原理。
丁
- 数据定义语言
请参阅DDL。
- 数据字典
跟踪 InnoDB 相关对象(如 表、 索引和表 列)的元数据。此元数据物理上位于
InnoDB
系统表空间中。由于历史原因,它在某种程度上与.frm 文件中存储的信息重叠。因为MySQL Enterprise Backup产品总是备份系统表空间,所以所有备份都包括数据字典的内容。
- 数据目录
每个 MySQL 实例保存 数据文件的
InnoDB
目录和代表各个数据库的目录。由datadir
配置选项控制。- 数据文件
系统
InnoDB
表空间,存放InnoDB
数据字典,能够存放多InnoDB
张表的数据,用一个或多个.ibdata
数据文件表示。File-per-table 表空间保存单个
InnoDB
表的数据,由.ibd
数据文件表示。通用表空间(MySQL 5.7.6 引入),可以存放多个
InnoDB
表的数据,也用一个.ibd
数据文件来表示。- 数据操作语言
请参阅DML。
- 数据仓库
主要运行大型 查询的数据库系统或应用程序。为了查询效率,可以以非规范化形式组织只读或主要读取数据 。可以受益 于 MySQL 5.6 及更高版本中对只读事务的优化。与OLTP对比 。
- 数据库
在 MySQL数据目录中,每个数据库都由一个单独的目录表示。InnoDB系统表空间可以在一个 MySQL 实例中保存来自多个数据库的表数据,它保存在 驻留在各个数据库目录之外的数据文件中。当 启用file-per-table模式时,表示单个 InnoDB 表的.ibd 文件存储在数据库目录中,除非使用该
DATA DIRECTORY
子句在其他地方创建。MySQL 5.7.6 中引入的通用表空间也将表数据保存在.ibd 文件中. 与 file-per-table .ibd 文件不同,通用表空间 .ibd 文件可以在一个 MySQL 实例中保存来自多个数据库的表数据,并且可以分配给相对于或独立于 MySQL 数据目录的目录。对于长期使用 MySQL 的用户来说,数据库是一个熟悉的概念。具有 Oracle 数据库背景的用户可能会发现数据库的 MySQL 含义更接近于 Oracle 数据库所说的架构。
- 直流电
数据控制语言,一组 用于管理权限的SQL语句。在 MySQL 中,由
GRANT
andREVOKE
语句组成。与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
操作 的性能。有关更多信息,请参阅第 14.13 节,“InnoDB 和在线 DDL”。此外,InnoDB
file-per-table 设置会影响DROP TABLE
和TRUNCATE TABLE
操作的行为。与DML和 DCL 对比。
- 僵局
不同 事务无法进行的情况,因为每个事务都持有 另一个需要的锁。因为两个事务都在等待资源变得可用,所以没有一个事务释放它持有的锁。
当事务锁定多个表中的行(通过
UPDATE
or 之类的语句SELECT ... FOR UPDATE
)但顺序相反时,可能会发生死锁。当这样的语句锁定索引记录和间隙的范围时,也会发生死锁 ,由于时间问题,每个事务都会获取一些锁而不是其他锁。有关如何自动检测和处理死锁的背景信息,请参阅 第 14.7.5.2 节,“死锁检测”。有关避免死锁情况和从死锁情况中恢复的提示,请参阅 第 14.7.5.3 节,“如何最小化和处理死锁”。
- 死锁检测
一种自动检测何时发生 死锁并自动回滚所涉及事务之一( 受害者)的机制。可以使用
innodb_deadlock_detect
配置选项禁用死锁检测。- 删除
InnoDB
处理 语句 时DELETE
,行会立即标记为删除,并且不再由查询返回。稍后在称为清除 操作的定期垃圾收集期间回收存储。对于删除大量数据,具有自身性能特征的相关操作是 TRUNCATE和 DROP。- 删除缓冲
将操作产生的对二级索引页面的更改存储
DELETE
在 更改缓冲区中而不是立即写入更改的技术,以便可以执行物理写入以最大限度地减少随机 I/O。(因为删除操作是一个两步过程,所以这个操作缓冲了通常标记删除索引记录的写入。)它是更改缓冲的类型之一;其他的是insert buffering和 purge buffering。- 去规格化
跨不同表复制数据的数据存储策略,而不是使用 外键和 连接查询链接表。通常用于 数据仓库应用程序,其中数据在加载后不会更新。在此类应用程序中,查询性能比在更新期间轻松维护一致数据更为重要。与归一化对比 。
- 递减指数
某些数据库系统可用的一种索引,其中索引存储针对处理子句进行了优化。目前,虽然 MySQL 允许 在语句中使用关键字 ,但它并没有为结果索引使用任何特殊的存储布局。
ORDER BY
column
DESCDESC
CREATE TABLE
另见索引。
- 脏页
- 脏读
检索不可靠数据的操作,数据已被另一个事务更新但尚未 提交。只有在称为read uncommitted的隔离级别才有可能。
这种操作不符合数据库设计的 ACID原则。它被认为是非常危险的,因为数据可以 回滚,或者在提交之前进一步更新;那么,执行脏读的事务将使用从未被确认为准确的数据。
它的对立面是一致性读取,它
InnoDB
确保一个事务不会读取另一个事务更新的信息,即使另一个事务同时提交也是如此。- 基于磁盘
一种主要在磁盘存储(硬盘驱动器或等效设备)上组织数据的数据库。数据在磁盘和内存之间来回传输以进行操作。它与内存数据库相反。虽然
InnoDB
是基于磁盘的,但它还包含缓冲池、多个缓冲池实例和 自适应哈希索引等功能,这些功能允许某些类型的工作负载主要从内存中工作。- 磁盘绑定
一种主要瓶颈是磁盘 I/O的工作负载。(也称为I/O-bound。)通常涉及频繁写入磁盘,或随机读取超出缓冲池容量的更多数据。
- 动态语言
数据操作语言,一组 用于执行 、 和 操作的SQL语句。该 语句有时被视为 DML 语句,因为该窗体与、 和 一样 需要遵守相同的锁定注意事项。
INSERT
UPDATE
DELETE
SELECT
SELECT ... FOR UPDATE
INSERT
UPDATE
DELETE
表的 DML 语句在事务
InnoDB
的上下文中运行,因此它们的效果可以 作为一个单元 提交或 回滚。与DDL和 DCL 对比。
- 文档编号
在
InnoDB
全文搜索功能中,表中包含FULLTEXT 索引的特殊列,用于唯一标识与每个 ilist值关联的文档。它的名字是FTS_DOC_ID
(需要大写)。列本身必须是BIGINT UNSIGNED NOT NULL
类型,具有名为 的唯一索引FTS_DOC_ID_INDEX
。最好在创建表时定义此列。如果InnoDB
在创建FULLTEXT
索引时必须将列添加到表中,则索引操作的开销要大得多。另请参见全文搜索、FULLTEXT 索引、ilist。
- 双写缓冲区
InnoDB
使用称为 doublewrite 的文件刷新技术。在将 页面写入 数据文件之前,InnoDB
首先将它们写入一个称为双写缓冲区的存储区域。只有在对双写缓冲区的写入和刷新完成后,才会InnoDB
将页面写入数据文件中的正确位置。如果操作系统、存储子系统或mysqld进程在页面写入过程中崩溃,可以在崩溃恢复InnoDB
期间从 doublewrite 缓冲区中找到一份完好的页面副本 。尽管数据总是被写入两次,但双写缓冲区不需要两倍的 I/O 开销或两倍的 I/O 操作。数据作为一个大的顺序块写入缓冲区本身,只需
fsync()
调用一次操作系统。- 降低
一种通过诸如 or 之类的语句删除架构对象的DDL操作。它在内部映射到一个语句。从一个 角度来看,此类操作的性能考虑涉及 数据字典被锁定以确保相互关联的对象全部更新的时间,以及更新 缓冲池等内存结构的时间。对于 表,删除操作与截断操作(语句) 具有一些不同的特征 。
DROP TABLE
DROP INDEX
ALTER TABLE
InnoDB
TRUNCATE TABLE
- 数据存储网
“数据库源名称” 的缩写。它是Connector/ODBC中连接 信息 的编码。有关完整详细信息,请参阅 在 Windows 上配置连接器/ODBC DSN 。它等效于 Connector/NET使用 的连接字符串。
另见connection、connection string、Connector/NET、Connector/ODBC。
- 动态游标
ODBC支持的 一种游标,可以在再次读取行时获取新的和更改的结果。游标是否可见更改以及更改的速度取决于所涉及的表类型(事务性或非事务性)以及事务性表的隔离级别。必须显式启用对动态游标的支持。
- 动态行格式
插件中引入的行格式
InnoDB
,作为 梭子鱼 文件格式的一部分提供。因为长的可变长度列值存储在保存行数据的页面之外,所以它对于包含大对象的行非常有效。由于通常不会访问大字段来评估查询条件,因此不会经常将它们带入缓冲池,从而减少 I/O 操作并更好地利用缓存内存。从 MySQL 5.7.9 开始,默认行格式由 定义
innodb_default_row_format
,默认值为DYNAMIC
.有关
InnoDB
DYNAMIC
行格式的其他信息,请参阅 动态行格式。- 动态SQL
与将语句的各个部分连接成字符串变量的幼稚技术相比, 该功能允许您使用更健壮、安全和高效的方法来创建和执行 准备好的语句来替换参数值。
另见准备好的声明。
- 动态语句
乙
- 尝鲜者
类似于beta的阶段,通常在非关键任务环境中评估软件产品的性能、功能和兼容性。
另见测试版。
- 埃菲尔铁塔
一种包括许多面向对象特性的编程语言。它的一些概念为 Java和 C#开发人员所熟悉。对于 MySQL 的开源 Eiffel API,请参阅第 27.13 节,“MySQL Eiffel Wrapper”。
- 嵌入式
嵌入式 MySQL 服务器库 ( libmysqld ) 使得在 客户端应用程序中运行功能齐全的 MySQL 服务器成为可能。主要的好处是提高了嵌入式应用程序的速度和更简单的管理。
- 错误日志
一种显示有关 MySQL 启动和关键运行时错误和 崩溃信息的日志。有关详细信息,请参阅第 5.4.2 节,“错误日志”。
- 驱逐
从缓存或其他临时存储区域(例如
InnoDB
缓冲池)中删除项目的过程。通常(但并非总是)使用LRU算法来确定要删除的项目。当一个 脏页被逐出时,它的内容被刷新到磁盘,并且任何脏的相邻页面 也可能被刷新。- 异常拦截器
一种用于跟踪、调试或增加数据库应用程序遇到的 SQL 错误的拦截器。例如,拦截器代码可以发出一条
SHOW WARNINGS
语句来检索附加信息,并添加描述性文本,甚至更改返回给应用程序的异常类型。因为拦截器代码仅在 SQL 语句返回错误时调用,所以在正常(无错误)操作期间不会对应用程序造成任何性能损失。在使用Connector/J的Java应用程序中 ,设置此类拦截器涉及实现 接口,以及向连接字符串添加 属性。
com.mysql.jdbc.ExceptionInterceptor
exceptionInterceptors
在使用Connector/NET的Visual Studio应用程序中,设置此类拦截器涉及定义一个从该类继承的类并将该类名称指定为连接字符串的一部分。
BaseExceptionInterceptor
另请参见Connector/J、Connector/NET、interceptor、Java、Visual Studio。
- 独占锁
一种防止任何其他事务锁定同一行的锁。根据事务 隔离级别,这种锁可能会阻止其他事务写入同一行,也可能会阻止其他事务读取同一行。默认隔离级别 REPEATABLE READ通过允许事务读取具有独占锁的行来实现更高 的并发性,这种技术称为一致性读取。
InnoDB
- 程度
表空间中的一 组页面。对于 16KB 的默认 页面大小,一个范围包含 64 个页面。在 MySQL 5.6 中, 实例的页面大小可以是 4KB、8KB 或 16KB,由 配置选项控制。对于 4KB、8KB 和 16KB 页面大小,范围大小始终为 1MB(或 1048576 字节)。
InnoDB
innodb_page_size
InnoDB
MySQL 5.7.6 中添加了 对 32KB 和 64KB 页面大小的支持。对于 32KB 页面大小,范围大小为 2MB。对于 64KB 页面大小,extent 大小为 4MB。InnoDB
段、 预读请求和 双写缓冲区等功能 使用一次读取、写入、分配或释放数据的 I/O 操作。
F
- .frm 文件
对于备份,您必须始终保留完整的
.frm
文件集以及备份数据,以便能够恢复备份后更改或删除的表。虽然每个
InnoDB
表都有一个.frm
文件,但在系统表空间InnoDB
中维护着自己的表元数据 。.frm
文件由 MySQL Enterprise Backup 产品备份。在进行备份时,不得通过ALTER TABLE
操作修改这些文件,这就是为什么包含非InnoDB
表的备份在备份文件时执行FLUSH TABLES WITH READ LOCK
操作以冻结此类活动的 原因.frm
。还原备份可能会导致.frm
创建、更改或删除文件以匹配备份时数据库的状态。- 故障转移
在发生故障时自动切换到备用服务器的能力。在 MySQL 上下文中,故障转移涉及备用数据库服务器。通常在 J2EE环境中由应用程序服务器或框架支持。
- 快速创建索引
InnoDB 插件中首次引入的功能,现在是 MySQL 5.5 及更高版本的一部分,通过避免完全重写关联表来 加速
InnoDB
二级索引的创建。加速也适用于删除二级索引。由于索引维护会增加许多数据传输操作的性能开销,因此请考虑执行诸如有
ALTER TABLE ... ENGINE=INNODB
或INSERT INTO ... SELECT * FROM ...
没有任何二级索引的操作,然后再创建索引。在 MySQL 5.6 中,此功能变得更加通用。
ALTER TABLE
您可以在创建索引时读取和写入表,并且可以在不复制表、不阻塞DML操作或两者的情况下执行更多类型的操作。因此在 MySQL 5.6 及更高版本中,这组功能被称为在线 DDL 而不是快速创建索引。有关相关信息,请参阅 第 14.13 节,“InnoDB 和在线 DDL”。
- 快速关机
默认关机程序
InnoDB
,基于配置设置innodb_fast_shutdown=1
。为了节省时间,跳过了某些刷新 操作。这种类型的关闭在正常使用期间是安全的,因为刷新操作是在下次启动期间执行的,使用与崩溃恢复中相同的机制 。在数据库因升级或降级而关闭的情况下,执行慢速关闭以确保在关闭期间将所有相关更改应用于 数据文件。- 文件格式
表的文件格式,使用 配置选项
InnoDB
启用。innodb_file_format
支持的文件格式是 Antelope和 Barracuda。Antelope 是原始InnoDB
文件格式,支持 REDUNDANT和 COMPACT行格式。Barracuda 是较新的InnoDB
文件格式,支持COMPRESSED和 DYNAMIC行格式。- 每表文件
由
innodb_file_per_table
选项控制的设置的通用名称,这是影响InnoDB
文件存储、功能可用性和 I/O 特性等方面的重要配置选项。从 MySQL 5.6.7 开始,innodb_file_per_table
默认启用。启用该选项后,您可以在其自己的.ibd 文件
innodb_file_per_table
中创建表, 而不是在系统表空间的共享ibdata 文件中 创建表。当表数据存储在单独的.ibd 文件中时,您可以更灵活地选择 数据压缩等功能所需的 行格式。操作也更快,回收的 空间可以被操作系统使用,而不是保留给.TRUNCATE TABLE
InnoDB
MySQL Enterprise Backup产品 对于 在其自己的文件中的表更加灵活。例如,表可以从备份中排除,但前提是它们位于单独的文件中。因此,此设置适用于备份频率较低或按不同计划备份的表。
另见压缩行格式、压缩、文件格式、.ibd 文件、ibdata 文件、innodb_file_per_table、MySQL 企业备份、行格式、系统表空间。
- 填充因子
在
InnoDB
索引中,在页面被拆分之前索引数据所占 页面的比例。索引数据首先在页面之间划分时未使用的空间允许使用更长的字符串值更新行,而无需昂贵的索引维护操作。如果填充因子太低,索引会占用比需要更多的空间,从而在读取索引时导致额外的 I/O 开销。如果填充因子太高,任何增加列值长度的更新都可能导致索引维护的额外 I/O 开销。有关更多信息,请参阅 第 14.6.2.2 节,“InnoDB 索引的物理结构”。- 固定行格式
此行格式由
MyISAM
存储引擎使用,而不是由InnoDB
. 如果您在 MySQL 5.7.6 或更早版本中 使用InnoDB
该选项 创建 表,请改用紧凑行格式,尽管该 值可能仍会显示在报告等输出中。从 MySQL 5.7.7 开始,如果指定则返回错误 。ROW_FORMAT=FIXED
InnoDB
FIXED
SHOW TABLE STATUS
InnoDB
ROW_FORMAT=FIXED
- 齐平
将更改写入已缓存在内存区域或临时磁盘存储区域中的数据库文件。定期刷新的
InnoDB
存储结构包括重做日志、撤销日志和缓冲池。刷新可能发生是因为内存区域已满并且系统需要释放一些空间,因为 提交操作意味着事务的更改可以完成,或者因为 缓慢的关闭操作意味着所有未完成的工作都应该完成。当一次刷新所有缓冲数据并不重要时,
InnoDB
可以使用一种称为 模糊检查点的技术来刷新小批量页面以分散 I/O 开销。- 刷新列表
InnoDB
跟踪 缓冲池中脏页的 内部数据结构: 即已更改且需要写回磁盘的页面。此数据结构由内部 微型交易频繁更新,因此由其自己的互斥锁保护以允许并发访问缓冲池。InnoDB
- 外键
一种指针关系,位于单独
InnoDB
表中的行之间。外键关系在父表和 子表的一列上定义 。除了能够快速查找相关信息外,外键还有助于通过防止任何这些指针在插入、更新和删除数据时变得无效来帮助实施参照完整性。这种强制机制是一种 约束。如果关联的外键值在另一个表中不存在,则无法插入指向另一个表的行。如果某行被删除或外键值改变,而另一个表中的行指向该外键值,可以设置外键防止删除,导致其他表中对应的列值变为 null, 或自动删除其他表中的相应行。
设计 规范化数据库的一个阶段是识别重复数据,将数据分离到新表中,并设置外键关系,以便使用 连接操作可以像查询单个表一样查询多个表。
- FOREIGN KEY 约束
通过外键关系维护数据库一致性 的约束 类型。与其他类型的约束一样,如果数据变得不一致,它可以防止数据被插入或更新;在这种情况下,要防止的不一致发生在多个表中的数据之间。或者,当执行 DML操作 时,根据创建外键时指定的选项 ,约束可以导致 子行中的数据被删除、更改为不同的值或设置为 null 。
FOREIGN KEY
ON CASCADE
- 费托斯
- 完整备份
- 全表扫描
需要读取表的全部内容的操作,而不是仅使用 索引选择的部分。通常使用小型查找表执行,或者在使用大型表的数据仓库情况下执行,其中所有可用数据都被聚合和分析。这些操作发生的频率以及表相对于可用内存的大小,对查询优化和管理缓冲池中使用的算法有影响。
索引的目的是允许在大表中查找特定值或值范围,从而在可行时避免全表扫描。
- 全文搜索
LIKE
与使用 SQL运算符或编写您自己的应用程序级搜索算法 相比,MySQL 功能可在表数据中以更快、更方便、更灵活的方式查找单词、短语、单词的布尔组合等 。它使用 SQL 函数MATCH()
和 FULLTEXT 索引。另见全文索引。
- 全文索引
MySQL全文搜索 机制中保存搜索索引 的一种特殊索引。表示列值中的单词,省略任何指定为 stopwords的单词。最初,仅适用于表格。从 MySQL 5.6.4 开始,它也可用于 InnoDB表。
MyISAM
- 模糊检查点
G
- 遗传算法
“普遍可用”,软件产品离开测试版并可供销售、官方支持和生产使用的阶段。
另见测试版。
- 广汽集团
“全局程序集缓存” 的缩写。.NET系统上用于存储库(程序集) 的中心区域。物理上由嵌套文件夹组成,被.NET CLR 视为单个虚拟文件夹。
- 差距
InnoDB
索引数据结构中可以插入新值 的位置。当您使用诸如 之类的语句锁定一组行时SELECT ... FOR UPDATE
,InnoDB
可以创建适用于间隙以及索引中的实际值的锁。例如,如果您选择所有大于 10 的值进行更新,间隙锁会阻止另一个事务插入大于 10 的新值。supremum 记录和infimum 记录表示包含大于或小于所有值的间隙当前指数值。另见并发、间隙锁、索引、infimum 记录、隔离级别、supremum 记录。
- 间隙锁
锁定索引记录之间的 间隙,或锁定第一个或最后一个索引记录之前的间隙。例如,
SELECT c1 FROM t WHERE c1 BETWEEN 10 and 20 FOR UPDATE;
阻止其他事务将值 15 插入到列t.c1
中,无论该列中是否已经存在任何此类值,因为范围内所有现有值之间的间隙都已锁定。与record lock和next-key lock对比。间隙锁是性能和 并发性之间权衡的一部分,并且用于某些事务隔离级别而不是其他事务隔离级别。
另见gap,infimum record,lock,next-key lock,record lock,supremum record。
- 一般日志
请参阅一般查询日志。
- 一般查询日志
一种用于对MySQL服务器处理的SQL语句进行诊断和故障排除的日志。可以存储在文件中或数据库表中。您必须通过配置选项启用此功能
general_log
才能使用它。sql_log_off
您可以通过配置选项 为特定连接禁用它。记录比慢查询日志 范围更广的查询 。与 用于复制 的二进制日志
SELECT
不同,一般查询日志包含语句并且不保持严格的顺序。有关详细信息,请参阅 第 5.4.3 节,“一般查询日志”。- 通用表空间
使用语法创建 的共享
InnoDB
表空间。CREATE TABLESPACE
通用表空间可以在MySQL数据目录之外创建,能够容纳多个 表,支持所有行格式的表。MySQL 5.7.6 中引入了通用表空间。使用或 语法 将表添加到通用表空间 。
CREATE TABLE
tbl_name
... TABLESPACE [=]tablespace_name
ALTER TABLE
tbl_name
TABLESPACE [=]tablespace_name
对比系统表空间 和file-per-table 表空间。
有关详细信息,请参阅第 14.6.3.3 节,“通用表空间”。
- 生成列
- 生成的存储列
请参见存储的生成列。
- 生成的虚拟列
请参阅虚拟生成列。
- 玻璃鱼
另请参阅J2EE。
- 全球交易
XA操作中涉及的 一种事务。它由几个本身是事务性的操作组成,但所有操作都必须作为一个组成功完成,或者全部作为一个组回滚。从本质上讲,这将 ACID属性“向上扩展了一个级别”,以便多个 ACID 事务可以作为也具有 ACID 属性的全局操作的组件一起执行。
- 小组提交
- GUID
“ global unique identifier ”的 缩写,一个ID值,可用于跨不同数据库、语言、操作系统等关联数据。(作为使用顺序整数的替代方法,相同的值可能出现在不同的表、数据库等中,引用不同的数据。)较旧的 MySQL 版本将其表示为
BINARY(16)
. 目前,它表示为CHAR(36)
. MySQL 有一个UUID()
以字符格式返回 GUID 值的函数,以及一个UUID_SHORT()
以整数格式返回 GUID 值的函数。因为连续的 GUID 值不一定按升序排序,所以它不是用作大型 InnoDB 表的主键的有效值。
H
- 哈希索引
一种索引,用于使用相等运算符而不是范围运算符(如大于或)的查询
BETWEEN
。它可用于MEMORY
表格。尽管出于历史原因哈希索引是MEMORY
表的默认索引,但该存储引擎还支持 B 树索引,这通常是通用查询的更好选择。MySQL 包含此索引类型的变体,即 自适应哈希索引
InnoDB
,如果需要,它会根据运行时条件 自动为表构建 。- 硬盘
“硬盘驱动器” 的缩写。指使用旋转盘片的存储介质,通常在与SSD进行比较对比时。它的性能特征会影响 基于磁盘的工作负载的吞吐量。
- 心跳
发送以指示系统正常运行的定期消息。在 复制上下文中,如果 源停止发送此类消息,则其中一个副本 可以取而代之。可以在集群环境中的服务器之间使用类似的技术,以确认所有服务器都在正常运行。
- 高水位线
表示上限的值,可以是运行时不应超过的硬限制,也可以是实际达到的最大值的记录。与low-water mark对比 。
另见低水位线。
- 历史清单
计划由 清除 操作处理的带有删除标记记录的事务 列表。记录在撤销日志中。历史列表的长度由命令报告。如果历史列表增长到超过 配置选项的值,每个DML 操作都会稍微延迟,以允许清除操作完成刷新已删除的记录。
InnoDB
SHOW ENGINE INNODB STATUS
innodb_max_purge_lag
也称为清除滞后。
- 打孔
从页面释放空块。
InnoDB
透明页面压缩功能依赖于 打孔支持。有关更多信息,请参阅 第 14.9.2 节,“InnoDB 页面压缩”。- 主持人
数据库服务器的网络名称,用于建立 连接。通常与端口一起指定。在某些情况下,IP 地址
127.0.0.1
比特殊名称更localhost
适合访问与应用程序位于同一服务器上的数据库。- 热的
行、表或内部数据结构被频繁访问的情况,需要某种形式的锁定或互斥,从而导致性能或可伸缩性问题。
尽管“热”通常表示不希望出现的情况,但热备份是首选的备份类型。
另见热备份。
- 热备份
在数据库运行且应用程序读取和写入数据库时进行的备份。备份涉及的不仅仅是复制数据文件:它必须包括在备份过程中插入或更新的任何数据;它必须排除在备份过程中删除的任何数据;并且它必须忽略任何未提交的更改。
执行热备份的 Oracle 产品,
InnoDB
尤其是表MyISAM
以及来自其他存储引擎的表,被称为 MySQL Enterprise Backup。热备份过程包括两个阶段。数据文件的初始复制会产生一个原始备份。应用 步骤合并了备份运行时对数据库所做的任何更改。应用更改会生成 准备好的备份;这些文件随时可以在需要时恢复。
另请参阅应用、MySQL 企业备份、准备好的备份、原始备份。
我
- .ibd 文件
file-per-table 表空间和通用表空间 的数据文件 。File-per-table 表空间
.ibd
文件包含单个表和关联的索引数据。一般表空间.ibd
文件可能包含多个表的表和索引数据。MySQL 5.7.6 中引入了通用表空间。.ibd
文件扩展名不适用于 由一个或多个ibdata 文件组成 的系统表空间。DATA DIRECTORY =
如果使用该子句 创建 file-per-table 表空间或通用表空间,则.ibd
文件位于指定路径,正常数据目录之外,并由 .isl 文件指向。当一个
.ibd
文件包含在MySQL Enterprise Backup产品的压缩备份中时,压缩的等价物是一个.ibz
文件。另见数据库、每表文件、通用表空间、ibdata 文件、.ibz 文件、innodb_file_per_table、.isl 文件、MySQL 企业备份、系统表空间。
- .ibz 文件
当MySQL Enterprise Backup产品执行 压缩备份时,它会将使用file-per-table设置 创建的 每个表空间文件从扩展名转换为 扩展名。
.ibd
.ibz
备份期间应用的压缩不同于 在正常操作期间保持表数据压缩的压缩行格式。压缩备份操作会跳过已经采用压缩行格式的表空间的压缩步骤,因为第二次压缩会减慢备份速度,但产生的空间节省很少或没有。
- .isl文件
在 MySQL 5.6 及更高版本中使用子句或在 MySQL 5.7 及更高版本中使用子句创建的 表 指定 .ibd 文件位置的文件。它的功能类似于符号链接,不受实际符号链接机制的平台限制。您可以将表空间存储在 数据库目录之外,例如,根据表的用途,存储在特别大或快速的存储设备上。有关详细信息,请参阅 第 14.6.1.2 节,“在外部创建表”和 第 14.6.3.3 节,“常规表空间”。
InnoDB
DATA DIRECTORY =
CREATE TABLESPACE ... ADD DATAFILE
InnoDB
- I/O 绑定
请参阅磁盘绑定。
- ib文件集
InnoDB
MySQL 数据库 中管理的一组文件:系统表空间、 file-per-table 表空间文件和重做日志文件。根据 MySQL 版本和InnoDB
配置,还可能包括通用表空间、临时表空间和撤消表空间文件。该术语有时用于InnoDB
文件结构和格式的详细讨论,以指代由InnoDB
MySQL 数据库管理的一组文件。- ibbackup_logfile
MySQL Enterprise Backup产品在热备份操作期间 创建的补充备份文件 。它包含有关备份运行时发生的任何数据更改的信息。初始备份文件(包括
ibbackup_logfile
)称为 原始备份,因为备份操作期间发生的更改尚未合并。在对原始备份文件执行 应用步骤后,生成的文件确实包含那些最终数据更改,称为准备好的备份。在此阶段,ibbackup_logfile
不再需要该文件。- 数据文件
一组名称如
ibdata1
、 等的文件ibdata2
组成InnoDB
系统表空间。有关驻留在系统表空间ibdata
文件中的结构和数据的信息,请参阅 第 14.6.3.1 节,“系统表空间”。文件的增长
ibdata
受innodb_autoextend_increment
配置选项的影响。另见更改缓冲区、数据字典、双写缓冲区、每个表的文件、.ibd 文件、innodb_file_per_table、系统表空间、撤消日志。
- 文件
非压缩临时表和相关对象 的
InnoDB
临时表空间 数据文件。配置文件选项, 允许用户定义临时表空间数据文件的相对路径。如果 未指定,默认行为是 在数据目录中创建一个自动扩展的 12MB 数据文件,旁边是.InnoDB
innodb_temp_data_file_path
innodb_temp_data_file_path
ibtmp1
ibdata1
- ib_log文件
一组文件,通常命名为
ib_logfile0
和ib_logfile1
,它们构成了 重做日志。有时也称为日志组。这些文件记录了试图改变InnoDB
表中数据的语句。在崩溃后启动时,这些语句会自动重放以更正由不完整事务写入的数据。此数据不能用于手动恢复;对于这种类型的操作,请使用二进制日志。
- 清单
在
InnoDB
FULLTEXT 索引中,数据结构由文档 ID 和标记(即特定单词)的位置信息组成。另见全文索引。
- 隐式行锁
另见行锁。
- 内存数据库
一种将数据保存在内存中的数据库系统,以避免由于磁盘 I/O 以及磁盘块和内存区域之间的转换而产生的开销。一些内存数据库牺牲了持久性(ACID设计理念中 的“ D ”)并且容易受到硬件、电源和其他类型故障的影响,使它们更适合只读操作。其他内存数据库确实使用持久性机制,例如将更改记录到磁盘或使用非易失性内存。
解决同类内存密集型处理的 MySQL 功能包括
InnoDB
缓冲池、 自适应哈希索引和 只读事务 优化、MEMORY
存储引擎、MyISAM
键缓存和 MySQL 查询缓存。- 增量备份
一种由MySQL Enterprise Backup产品执行的热备份, 它只保存自某个时间点以来更改的数据。拥有完整备份和连续的增量备份可以让您在很长一段时间内重建备份数据,而无需手头保留多个完整备份的存储开销。您可以还原完整备份,然后连续应用每个增量备份,或者您可以通过应用每个增量备份来使完整备份保持最新,然后执行单个还原操作。
更改数据的粒度在 页面级别。一页实际上可能覆盖不止一行。每个更改的页面都包含在备份中。
另请参阅热备份,MySQL Enterprise Backup,页面。
- 指数
一种为 表的行 提供快速查找功能的数据结构 ,通常通过形成 表示特定 列或列集的 所有值的树结构( B 树)来实现。
InnoDB
表总是有一个 代表主键的聚簇索引。它们还可以在一个或多个列上定义一个或多个二级索引。根据其结构,二级索引可以分为 部分索引、 列索引或 复合索引。索引是 查询性能的一个重要方面。数据库架构师设计表、查询和索引,以允许快速查找应用程序所需的数据。理想的数据库设计在可行的情况下使用覆盖索引 ;查询结果完全根据索引计算,而不读取实际的表数据。每个 外键约束还需要一个索引,以有效地检查父表和 子表中是否存在值。
虽然 B 树索引是最常见的,但哈希索引使用了不同类型的数据结构,如
MEMORY
存储引擎和InnoDB
自适应哈希索引。 R树索引用于多维信息的空间索引。另请参见自适应哈希索引、B 树、子表、聚集索引、列索引、复合索引、覆盖索引、外键、哈希索引、父表、部分索引、主键、查询、R 树、行、二级索引,桌子。
- 索引缓存
保存
InnoDB
全文搜索令牌数据的内存区域。当在属于 FULLTEXT 索引的列中插入或更新数据时,它会缓冲数据以最大限度地减少磁盘 I/O 。当索引缓存变满时,令牌数据将写入磁盘。每个InnoDB
FULLTEXT
索引都有自己独立的索引缓存,其大小由配置选项控制innodb_ft_cache_size
。- 索引条件下推
索引条件下推 (ICP) 是一种优化,
WHERE
如果条件的一部分可以使用索引中的字段进行评估,则将条件的一部分下推到存储引擎。ICP可以减少存储引擎必须访问基表的次数和MySQL服务器必须访问存储引擎的次数。有关详细信息,请参阅 第 8.2.1.5 节,“索引条件下推优化”。- 索引提示
用于覆盖 优化器推荐的索引的扩展 SQL 语法。例如,the
FORCE INDEX
、、USE INDEX
和IGNORE INDEX
子句。通常在索引列的值分布不均匀时使用,从而导致 基数估计不准确。- 索引前缀
在应用于多列的索引(称为复合索引)中,索引的初始列或前导列。引用复合索引的前 1、2、3 等列的查询可以使用该索引,即使查询没有引用索引中的所有列。
- 指标统计
查看统计数据。
- 最小记录
索引中 的伪记录,表示 低于该索引中最小值的间隙。如果一个事务有一个语句,例如 ,并且该列中的最小值是 5,它是对 infimum 记录的锁定,可以防止其他事务插入更小的值,例如 0、-10 等。
SELECT ... FROM ... WHERE col < 10 FOR UPDATE;
- INFORMATION_SCHEMA
为 MySQL数据字典提供查询接口 的数据库 的名称。(此名称由 ANSI SQL 标准定义。)要检查有关数据库的信息(元数据),您可以查询诸如 和 之类的表,而不是使用 生成非结构化输出的命令。
INFORMATION_SCHEMA.TABLES
INFORMATION_SCHEMA.COLUMNS
SHOW
该
INFORMATION_SCHEMA
数据库还包含特定于InnoDBInnoDB
的表,这些表为数据字典提供查询接口。您使用这些表不是为了查看数据库的结构,而是为了获取有关表工作的实时信息,InnoDB
以帮助进行性能监控、调整和故障排除。- InnoDB
一个 MySQL 组件,它结合了高性能和 事务处理能力,以实现可靠性、健壮性和并发访问。它体现了 ACID的设计理念。表示为存储引擎;它处理使用该
ENGINE=INNODB
子句创建或更改的表。有关体系结构详细信息和管理过程, 请参阅 第 14 章,InnoDB 存储引擎,有关性能建议,请参阅第 8.5 节,“优化 InnoDB 表”。在 MySQL 5.5 及更高版本中,
InnoDB
是新表的默认存储引擎,ENGINE=INNODB
不需要该子句。InnoDB
表非常适合 热备份。 有关用于在不中断正常处理的情况下备份 MySQL 服务器 的MySQL Enterprise Backup产品的信息,请参阅 第 28.2 节,“MySQL Enterprise Backup Overview” 。- 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
) 是默认的,这反映了从基于语句的复制到基于行的复制作为默认复制类型的变化。另见auto-increment,auto-increment locking,混合模式 insert,primary key。
- innodb_file_format
该
innodb_file_format
选项定义了用于新的 file-per-table 表 空间的文件格式。目前,您可以指定Antelope和 Barracuda文件格式。InnoDB
另请参阅Antelope、Barracuda、文件格式、file-per-table、通用表空间、innodb_file_per_table、系统表空间、表空间。
- innodb_file_per_table
影响
InnoDB
文件存储、功能可用性和 I/O 特性的许多方面的重要配置选项。在 MySQL 5.6.7 及更高版本中,它默认启用。该innodb_file_per_table
选项打开file-per-table模式。启用此模式后,新创建的InnoDB
表和关联的索引可以存储在系统表空间之外的file-per-table .ibd 文件中。此选项会影响许多 SQL 语句的性能和存储注意事项,例如
DROP TABLE
和TRUNCATE TABLE
。启用该
innodb_file_per_table
选项可以让您利用 MySQL Enterprise Backup中的表压缩和命名表备份等功能。有关详细信息,请参阅
innodb_file_per_table
和 第 14.6.3.2 节,“File-Per-Table 表空间”。另请参阅压缩、每个表的文件、.ibd 文件、MySQL 企业备份、系统表空间。
- innodb_lock_wait_timeout
该选项在等待共享资源变为可用、放弃并处理错误、重试或在您的应用程序中进行替代处理
innodb_lock_wait_timeout
之间设置平衡 。回滚等待超过指定时间获取 锁的任何事务。如果死锁是由不同存储引擎控制的多个表的更新引起的,则特别有用 ;不会自动检测到此类死锁 。InnoDB
- innodb_strict_mode
该
innodb_strict_mode
选项控制是否InnoDB
在 严格模式下运行,在这种模式下,通常被视为警告的条件会导致错误(并且底层语句失败)。另见严格模式。
- 插入
SQL 中的主要DML 操作之一。插入的性能是将数百万行加载到表 中的数据仓库系统和许多并发连接可能以任意顺序将行插入到同一个表中的OLTP系统的关键因素 。如果插入性能对您很重要,您应该了解InnoDB 特性,例如更改缓冲中使用的插入缓冲区和 自动递增列。
- 插入缓冲区
更改缓冲区 的旧名称。
DELETE
在 MySQL 5.5 中,添加了对缓冲和UPDATE
操作的二级索引页面更改的支持 。以前,只有INSERT
操作产生的变化才会被缓冲。首选术语现在是change buffer。- 插入缓冲
将操作产生的对二级索引页面的更改存储
INSERT
在更改缓冲区中而不是立即写入更改的技术,以便可以执行物理写入以最大限度地减少随机 I/O。它是变化缓冲的一种;其他的是delete buffering和 purge buffering。如果二级索引是唯一的, 则不使用插入缓冲 ,因为在写出新条目之前无法验证新值的唯一性。其他类型的更改缓冲确实适用于唯一索引。
- 插入意向锁
一种间隙锁,由
INSERT
行插入之前的操作设置。这种类型的锁 表示插入的意图,这样插入到同一索引间隙的多个事务如果不在间隙内的同一位置插入,则无需等待彼此。有关详细信息,请参阅 第 14.7.1 节,“InnoDB 锁定”。- 实例
一个单独的mysqld守护进程管理一个数据目录,该目录代表一个或多个具有一组表的数据库。在开发、测试和一些 复制场景中,在同一 台服务器机器上有多个实例是很常见的,每个实例管理自己的数据目录并监听自己的端口或套接字。在一个实例运行 磁盘绑定工作负载的情况下,服务器可能仍有额外的 CPU 和内存容量来运行其他实例。
- 仪表
在源代码级别进行修改以收集性能数据以进行调整和调试。在 MySQL 中,检测收集的数据通过使用数据库的 SQL 接口
INFORMATION_SCHEMA
公开PERFORMANCE_SCHEMA
。- 意向排他锁
见意向锁。
- 意向锁
一种应用于表 的锁,用于指示事务打算在表中的行上获取的锁的种类。不同的事务可以在同一个表上获取不同类型的意向锁,但是第一个在表上获取意向排他(IX) 锁的事务会阻止其他事务在表上获取任何 S 或 X 锁。反之,第一个获得 共享意向的交易表上的 (IS) 锁可防止其他事务获取表上的任何 X 锁。两阶段过程可以让锁请求按顺序解决,不会阻塞锁和相应的兼容操作。有关此锁定机制的更多信息,请参阅第 14.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、transaction。
杰
- 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 堆栈中通常提供的与数据库相关的功能包括 连接池和 故障转移支持。
- 爪哇
一种结合了高性能、丰富的内置功能和数据类型、面向对象的机制、广泛的标准库和范围广泛的可重用第三方模块的编程语言。许多框架、应用程序服务器和其他技术支持企业开发。C和 C++开发人员熟悉它的大部分语法。要使用 MySQL 编写 Java 应用程序,您可以使用 称为 Connector/J的JDBC驱动程序。
- 老板
另请参阅J2EE。
- JDBC
“ Java Database Connectivity ”的 缩写,一种 用于从Java应用程序访问数据库 的API 。编写 MySQL 应用程序的 Java 开发人员使用 Connector/J组件作为他们的 JDBC 驱动程序。
- JNDI
另见Java。
- 加入
通过引用表中包含相同值的列从多个表中检索数据 的查询。理想情况下,这些列是
InnoDB
外键关系的一部分,这可确保 引用完整性并为连接列建立索引。通常用于在规范化数据设计 中通过用数字 ID 替换重复的字符串来节省空间和提高查询性能 。
钾
大号
- 闩锁
一种轻量级结构,用于为其自己的内部内存结构
InnoDB
实现锁定,通常保持短暂的时间(以毫秒或微秒为单位)。一个通用术语,包括互斥锁(用于独占访问)和读写锁 (用于共享访问)。某些锁存器是InnoDB
性能调整的重点。有关闩锁使用和争用的统计信息可通过 性能模式界面获得。- libmysql
- libmysql客户端
libmysqlclient.a
名为或 的库文件,libmysqlclient.so
通常链接到用C编写的客户端程序 。有时非正式地称为libmysql或 mysqlclient库。- libmysqld
这个嵌入式MySQL 服务器库使得在客户端应用程序中运行功能齐全的 MySQL 服务器成为可能。主要的好处是提高了嵌入式应用程序的速度和更简单的管理。您链接到
libmysqld
库而不是 libmysqlclient。所有这三个库的 API 都是相同的。- 生命周期拦截器
Connector/J支持的 一种拦截器。它涉及实现接口 。
com.mysql.jdbc.ConnectionLifecycleInterceptor
- 列表
InnoDB
缓冲池表示为内存 页列表 。当新页面被访问并进入缓冲池时,该列表会重新排序,因为缓冲池中的页面会再次被访问并被视为较新的页面,并且随着长时间未访问的页面 被从缓冲池中逐出。缓冲池分为 子列表,替换策略是熟悉的 LRU技术的变体。- 负载均衡
一种通过向复制或集群配置中的不同从属服务器发送查询请求来扩展只读连接的技术。使用 Connector/J,负载平衡通过
com.mysql.jdbc.ReplicationDriver
类启用并由配置属性控制loadBalanceStrategy
。- 本地主机
另见连接。
- 锁
作为锁定策略 的一部分,控制对资源(例如表、行或内部数据结构)的访问的对象的高级概念。对于密集的性能调优,您可能会深入研究实现锁的实际结构,例如 mutexes和 latches。
- 锁定升级
一些数据库系统中使用的一种操作,将许多 行锁转换为单个 表锁,节省内存空间但减少对表的并发访问。
InnoDB
对行锁使用节省空间的表示,因此 不需要 锁升级。- 锁定模式
共享 (S)锁允许 事务读取一行。多个事务可以同时获取同一行上的 S 锁。
排他 (X) 锁允许事务更新或删除行。没有其他事务可以同时在同一行上获取任何类型的锁。
意向锁适用于表,用于指示事务打算在表中的行上获取什么样的锁。不同的事务可以在同一个表上获取不同类型的意向锁,但是第一个在表上获取意向排他 (IX) 锁的事务会阻止其他事务在表上获取任何 S 或 X 锁。相反,第一个获取表上意向共享 (IS) 锁的事务会阻止其他事务获取表上的任何 X 锁。两阶段过程可以让锁请求按顺序解决,不会阻塞锁和相应的兼容操作。
- 锁定
保护 事务不被其他事务查询或更改的数据看到或更改的系统。锁定策略必须平衡数据库操作的 可靠性和一致性( ACID哲学的原则)与良好并发性所需的性能 。微调锁定策略通常涉及选择 隔离级别并确保所有数据库操作对于该隔离级别都是安全可靠的。
- 锁定读取
SELECT
同时对表执行锁定操作 的语句InnoDB
。要么SELECT ... FOR UPDATE
要么SELECT ... LOCK IN SHARE MODE
。它有可能产生 死锁,这取决于事务的 隔离级别。与非锁定读取相反。只读事务中的全局表不允许 。SELECT ... FOR SHARE
SELECT ... LOCK IN SHARE MODE
在 MySQL 8.0.1 中 替换,但LOCK IN SHARE MODE
仍然可用于向后兼容。- 日志
在
InnoDB
上下文中,“日志”或 “日志文件”通常是指 由 ib_logfile 文件表示的重做日志。另一种类型的日志是 撤消日志,它是一个存储区域,用于保存活动事务修改的数据副本。N
InnoDB
MySQL 中其他重要的日志类型是 错误日志(用于诊断启动和运行时问题)、二进制日志(用于复制和执行时间点恢复)、一般查询日志(用于诊断应用程序问题)、和 慢速查询日志(用于诊断性能问题)。
- 日志缓冲区
保存要写入 构成 重做日志的日志文件的数据的内存区域。它由 配置选项控制。
innodb_log_buffer_size
- 日志文件
构成重做日志 的 ib_logfile
N
文件之一。数据从日志缓冲区内存区域 写入这些文件 。另见ib_logfile、日志缓冲区、重做日志。
- 日志组
构成重做日志的一组文件,通常命名为
ib_logfile0
和ib_logfile1
。(因此,有时统称为 ib_logfile。)另见ib_logfile,重做日志。
- 合乎逻辑的
一种涉及高级抽象方面的操作类型,例如表、查询、索引和其他 SQL 概念。通常,逻辑方面对于使数据库管理和应用程序开发方便和可用很重要。与物理对比。
- 逻辑备份
重现表结构和数据而不复制实际数据文件的备份。例如,该
mysqldump
命令会生成一个逻辑备份,因为它的输出包含诸如CREATE TABLE
和之类的语句INSERT
,可以重新创建数据。与物理备份对比。逻辑备份提供了灵活性(例如,您可以在恢复之前编辑表定义或插入语句),但 恢复时间可能比物理备份长得多。- 松动的_
InnoDB
服务器启动后 添加到配置选项的前缀,因此当前级别的 MySQL 无法识别的任何新配置选项都不会导致启动失败。MySQL 处理以此前缀开头的配置选项,但如果前缀后的部分不是可识别的选项,则给出警告而不是失败。另见启动。
- 低水位线
表示下限的值,通常是一些纠正措施开始或变得更积极的阈值。与high-water mark对比。
另见高水位线。
- LRU
“最近最少使用” 的首字母缩写词,一种管理存储区域的常用方法。当需要空间来缓存较新的项目时,最近未使用的项目将被逐出。
InnoDB
默认情况下使用 LRU 机制来管理 缓冲池中的页面,但在 页面可能只被读取一次的情况下会出现异常,例如在全表扫描期间。LRU 算法的这种变体称为中点插入策略。有关详细信息,请参阅 第 14.5.1 节,“缓冲池”。- LSN
“日志序列号” 的缩写。这个任意的、不断增加的值表示对应于重做日志中记录的操作的时间点。(这个时间点与 事务边界无关;它可以落在一个或多个事务的中间。)它在崩溃恢复和管理缓冲池
InnoDB
期间在 内部使用。在 MySQL 5.6.3 之前,LSN 是一个 4 字节的无符号整数。当重做日志文件大小限制从 4GB 增加到 512GB 时,LSN 在 MySQL 5.6.3 中变为 8 字节无符号整数,因为需要额外的字节来存储额外的大小信息。基于 MySQL 5.6.3 或更高版本构建的使用 LSN 值的应用程序应使用 64 位而不是 32 位变量来存储和比较 LSN 值。
在MySQL Enterprise Backup 产品中,您可以指定一个 LSN 来表示进行增量备份的时间点。相关的 LSN 由mysqlbackup命令的输出显示。一旦有了与完整备份时间相对应的 LSN,就可以指定该值以进行后续增量备份,其输出包含下一次增量备份的另一个 LSN。
米
- .MRG文件
包含对其他表的引用的文件,由
MERGE
存储引擎使用。具有此扩展名的文件始终包含在由 MySQL Enterprise Backup 产品 的mysqlbackup命令生成的 备份中。- .MYD文件
MySQL 用来存储
MyISAM
表数据的文件。- .MYI文件
MySQL 用来存储
MyISAM
表索引的文件。- 掌握
见来源。
- 主线程
在后台执行各种任务的
InnoDB
线程。大多数这些任务都与 I/O 相关,例如将更改从更改缓冲区写入适当的二级索引。为了提高并发性,有时会将操作从主线程移至单独的后台线程。例如,在 MySQL 5.6 及更高版本中, 脏页由 页面清理器线程 而不是主线程 从 缓冲池中清除。
- MDL
另见元数据锁。
- 中度信任
- 内存缓存
许多 MySQL 和 NoSQL软件栈的一个流行组件,允许快速读取和写入单个值并将结果完全缓存在内存中。传统上,应用程序需要额外的逻辑来将相同的数据写入 MySQL 数据库以进行永久存储,或者在数据尚未缓存在内存中时从 MySQL 数据库读取数据。现在,应用程序可以使用简单的 memcached协议,由多种语言的客户端库支持,使用
InnoDB
或 直接与 MySQL 服务器通信NDB
表。这些 MySQL 表的 NoSQL 接口允许应用程序实现比直接发出 SQL 语句更高的读写性能,并且可以简化已经包含内存缓存的memcached系统的应用程序逻辑和部署配置 。表的memcached接口
InnoDB
在 MySQL 5.6 及更高版本中可用;有关详细信息,请参阅第 14.21 节,“InnoDB memcached 插件”。表的 memcached接口NDB
在 NDB Cluster 7.2 及更高版本中可用;有关详细信息,请参阅 http://dev.mysql.com/doc/ndbapi/en/ndbmemcache.html 。- 合并
将更改应用于缓存在内存中的数据,例如当页面被带入缓冲池时,更改缓冲区中记录的任何适用更改 都将合并到缓冲池中的页面中。更新后的数据最终通过flush机制 写入表空间。
- 元数据锁
一种锁,可防止 对另一个事务同时使用的表进行 DDL操作。有关详细信息,请参阅 第 8.11.4 节,“元数据锁定”。
对联机操作的 增强 ,特别是在 MySQL 5.6 及更高版本中,重点在于减少元数据锁定的数量。目标是在 表被其他事务查询、更新等操作时,不更改表结构(例如表)的 DDL 操作继续
CREATE INDEX
进行 。DROP INDEX
InnoDB
- 指标计数器
在 MySQL 5.6 及更高版本中,由INFORMATION_SCHEMA
INNODB_METRICS
中的表 实现的功能 。您可以查询 低级操作的 计数和总数,并将结果与 性能模式中的数据结合使用以进行性能调整。InnoDB
- 中点插入策略
最初将 页面放入
InnoDB
缓冲池的技术不是在列表的“最新”端,而是在中间的某个位置。innodb_old_blocks_pct
根据选项的设置,该点的确切位置可能会有所不同 。目的是只读取一次的页面,例如在全表扫描期间,可以比使用严格的 LRU算法更快地从缓冲池中老化。有关详细信息,请参阅第 14.5.1 节,“缓冲池”。- 小额交易
处理的内部阶段,在DML操作期间在物理 级别对内部数据结构
InnoDB
进行更改时。迷你交易 (mtr) 没有 回滚的概念;多个小交易可以在单个 交易中发生。小型事务将信息写入崩溃恢复期间使用的重做日志。迷你事务也可以在常规事务的上下文之外发生,例如在 后台线程的 清除处理期间。- 混合模式插入
为一些但不是所有新行指定自动增量值 的
INSERT
语句 。例如,多值可以在某些情况下和其他情况下 为自动增量列指定一个值 。为列值指定为 的行生成自动增量值 。另一个示例是一条 语句,其中可能会生成但不使用自动增量值,用于处理作为 而不是语句处理的任何重复行。INSERT
NULL
InnoDB
NULL
INSERT ... ON DUPLICATE KEY UPDATE
UPDATE
INSERT
可能导致 复制配置中的源服务器和 副本服务器 之间出现一致性问题。可能需要调整 innodb_autoinc_lock_mode 配置选项的值。
另见auto-increment,innodb_autoinc_lock_mode,replica,replication,source。
- MM.MySQL
用于 MySQL 的较旧的 JDBC 驱动程序在与 MySQL 产品集成时 演变为 Connector/J 。
另见连接器/J。
- 单核细胞增多症
- 地铁
请参阅迷你交易。
- 多核
- 多版本并发控制
请参阅MVCC。
- 互斥量
“互斥变量” 的非正式缩写。(Mutex 本身是“互斥”的缩写。)用于表示和强制执行对内部内存数据结构的
InnoDB
独占访问 锁的低级对象。一旦获得锁,任何其他进程、线程等都无法获得相同的锁。与rw-locks对比,后者InnoDB
用于表示和强制执行对内部内存数据结构的共享访问锁。Mutexes 和 rw-locks 统称为latches。- MVCC
“多版本并发控制” 的缩写。这种技术让具有特定 隔离级别的
InnoDB
事务执行 一致的读取操作;也就是说,查询正在被其他事务更新的行,并查看这些更新发生之前的值。这是一种提高 并发性的强大技术,它允许查询继续进行而无需等待 其他事务持有的 锁。这种技术在数据库世界中并不普遍。其他一些数据库产品和其他一些 MySQL 存储引擎不支持它。
- 我的.cnf
- 我的配置文件
- MyODBC 驱动程序
另请参阅连接器/ODBC。
- 数据库
mysql程序是 MySQL 数据库的命令行解释器 。它 通过将请求传递给 mysqld守护进程 来处理SQL语句以及 MySQL 特定的命令,例如。
SHOW TABLES
- MySQL 企业备份
执行MySQL 数据库热备份的许可产品。它在备份
InnoDB
表时提供最高的效率和灵活性,但也可以备份MyISAM
其他类型的表。- mysql备份命令
MySQL Enterprise Backup产品 的命令行工具。它对表 进行 热备份操作, 对 其他类型的表进行热备份。有关此命令的更多信息,请参阅第 28.2 节,“MySQL 企业备份概述”。
InnoDB
MyISAM
另见热备份、MySQL 企业备份、热备份。
- mysql客户端
- mysqld
mysqld也称为 MySQL 服务器,是一个单一的多线程程序,它完成 MySQL 安装中的大部分工作。它不会产生额外的进程。MySQL 服务器管理对包含数据库、表和其他信息(如日志文件和状态文件)的 MySQL 数据目录的访问。
mysqld作为 Unix 守护进程或 Windows 服务运行,不断等待请求并在后台执行维护工作。
- MySQL数据库
构成 MySQL Python API基础的 开源 Python模块的名称。
另见Python、Python API。
- mysql转储
对数据库、表和表数据的某种组合 执行逻辑备份的命令。结果是再现原始模式对象、数据或两者的 SQL 语句。对于大量数据,MySQL Enterprise Backup 等物理备份解决方案速度更快,特别是对于 恢复操作。
另见逻辑备份、MySQL 企业备份、物理备份、恢复。
否
- 。网
- 本机 C API
另见libmysql。
- 自然键
索引列,通常是主键,其中的值具有一定的现实意义。通常不建议这样做,因为:
如果该值应该发生变化,则可能需要进行大量索引维护以重新排序 聚集索引并更新在每个二级索引中重复的主键值副本。
即使看似稳定的值也可能以难以在数据库中正确表示的不可预知的方式发生变化。例如,一个国家可以变成两个或几个,使原来的国家代码作废。或者,关于唯一值的规则可能有例外。例如,即使纳税人 ID 对于一个人来说是唯一的,数据库也可能不得不处理违反该规则的记录,例如身份盗用的情况。纳税人 ID 和其他敏感的 ID 号也是不好的主键,因为它们可能需要保护、加密,并且在其他方面不同于其他列。
因此,通常最好使用任意数值来形成合成键,例如使用自动增量 列。
See Also auto-increment , clustered index , primary key , secondary index , synthetic key。
- 邻居页面
与特定页面具有相同 范围的 任何页面。当一个页面被选择 刷新时,任何相邻的脏页面通常也会被刷新,作为传统硬盘的 I/O 优化。在 MySQL 5.6 及更高版本中,此行为可以由配置变量控制 ;您可能会为 SSD 驱动器关闭该设置,SSD 驱动器在随机位置写入小批量数据时没有相同的开销。
innodb_flush_neighbors
- 下一键锁
索引记录上的记录锁和索引记录之前的间隙上的间隙锁 的组合。
- 非锁定读
不使用 or子句 的查询。只读事务中全局表允许的唯一查询。与锁定读取相反 。请参阅 第 14.7.2.3 节,“一致的非锁定读取”。
SELECT ... FOR UPDATE
SELECT ... LOCK IN SHARE MODE
SELECT ... FOR SHARE
SELECT ... LOCK IN SHARE MODE
在 MySQL 8.0.1 中 替换,但LOCK IN SHARE MODE
仍然可用于向后兼容。- 不可重复读
查询检索数据的情况,同一事务中的后续查询 检索应该是相同数据的内容,但查询返回不同的结果(同时被另一个事务提交更改)。
这种操作违背了 数据库设计的ACID原则。在事务中,数据应该是一致的,具有可预测和稳定的关系。
在不同的隔离级别中,不可重复读被 序列化读和 可重复读级别阻止,而一致读和未提交读级别允许。
- 非阻塞 I/O
另请参阅异步 I/O。
- 归一化
一种数据库设计策略,将数据拆分到多个表中,并将重复值压缩到由一个 ID 表示的单行中,以避免存储、查询和更新冗余或冗长的值。它通常用于 OLTP应用程序。
例如,一个地址可能被赋予一个唯一的 ID,这样人口普查数据库就可以通过将该 ID 与每个家庭成员相关联来表示 居住在该地址的关系,而不是存储复杂值的多个副本,例如 123 Main Street ,任何城镇,美国。
再举一个例子,虽然一个简单的地址簿应用程序可能将每个电话号码与一个人的姓名和地址存储在同一个表中,但电话公司数据库可能会为每个电话号码分配一个特殊的 ID,并将号码和 ID 存储在一个单独的表中。当区域代码分开时,这种标准化表示可以简化大规模更新。
并不总是推荐规范化。主要查询且仅通过完全删除和重新加载来更新的数据通常保存在更少、更大的表中,其中包含重复值的冗余副本。这种数据表示被称为 非规范化,经常出现在数据仓库应用程序中。
- 无SQL
不使用SQL语言作为读取和写入数据的主要机制的一组数据访问技术的广义术语。一些NoSQL技术作为key-value存储,只接受单值读写;一些放宽了ACID方法论的限制;还有一些不需要预先计划的 架构。MySQL 用户可以通过使用memcached API 直接访问某些类型的 MySQL 表,将 NoSQL 风格的处理与 SQL 操作结合起来以提高速度和简单性,以提高灵活性和方便性 。memcached接口 _
InnoDB
表在 MySQL 5.6 及更高版本中可用;有关详细信息,请参阅第 14.21 节,“InnoDB memcached 插件”。表的 memcached接口NDB
在 NDB Cluster 7.2 及更高版本中可用;请参阅 ndbmemcache—NDB Cluster 的 Memcache API(不再支持)。- NOT NULL 约束
一种约束类型,指定列不能包含任何NULL值。它有助于保持参照完整性,因为数据库服务器可以识别具有错误缺失值的数据。它还有助于查询优化中涉及的算法,允许优化器预测该列索引中的条目数。
- 无效的
SQL中 的一个特殊值,表示缺少数据。涉及
NULL
值的任何算术运算或相等性测试依次产生NULL
结果。(因此它类似于 NaN 的 IEEE 浮点概念,“不是数字” 。)在确定要除以多少行时,任何聚合计算(例如AVG()
忽略具有 值的行)。NULL
唯一适用于NULL
值的测试使用 SQL 习语IS NULL
或IS NOT NULL
.NULL
值在索引操作中发挥作用 ,因为为了提高性能,数据库必须尽量减少跟踪缺失数据值的开销。通常,NULL
值不存储在索引中,因为使用标准比较运算符测试索引列的查询永远无法将行与NULL
该列的值相匹配。出于同样的原因,唯一索引不会阻止NULL
值;这些值根本没有在索引中表示。在列上声明NOT NULL
约束可以确保没有行遗漏在索引之外,从而实现更好的查询优化(准确的行计数和估计是否使用索引)。因为主键必须能够唯一标识表中的每一行,所以单列主键不能包含任何
NULL
值,多列主键不能包含所有列都有NULL
值的行。虽然 Oracle 数据库允许将
NULL
值与字符串连接,但InnoDB
将此类操作的结果视为NULL
.
欧
- .OPT文件
包含数据库配置信息的文件。具有此扩展名的文件包含在由 MySQL Enterprise Backup 产品 的mysqlbackup命令生成的 备份中。
- ODBC
Open Database Connectivity 的首字母缩写词,一种行业标准 API。通常与基于 Windows 的服务器或需要 ODBC 与 MySQL 通信的应用程序一起使用。MySQL ODBC 驱动程序称为 Connector/ODBC。
另请参阅连接器/ODBC。
- 离页栏
包含可变长度数据(例如
BLOB
和VARCHAR
)的列太长而无法放入B 树页面。数据存储在溢出页中。对于 此类存储, DYNAMIC行格式比旧的 COMPACT行格式更有效。- 联机事务处理
“在线交易处理” 的缩写。一种数据库系统或数据库应用程序,它运行具有许多事务的工作负载,具有频繁的写入和读取,通常一次影响少量数据。例如,航班预订系统或处理银行存款的应用程序。数据可能以 规范化形式组织,以在DML (插入/更新/删除)效率和 查询效率之间取得平衡。与数据仓库对比 。
凭借其行级锁定和 事务功能, InnoDB是 OLTP 应用程序中使用的 MySQL 表的理想存储引擎。
- 在线的
一种不涉及数据库停机、阻塞或受限操作的操作。通常应用于 DDL。缩短受限操作周期的操作,例如 快速创建索引,在 MySQL 5.6 中 已经演变成更广泛的在线 DDL操作集。
在备份的上下文中,热备份是在线操作,而 热备份是部分在线操作。
- 在线DDL
一种在DDL(主要 )操作
InnoDB
期间 提高表的性能、并发性和可用性的功能。有关详细信息,请参阅 第 14.13 节,“InnoDB 和在线 DDL”。ALTER TABLE
详细信息因操作类型而异。在某些情况下,可以在进行过程中同时修改表
ALTER TABLE
。可以在没有表副本或使用特别优化的表副本类型的情况下执行该操作。就地操作的 DML 日志空间使用由innodb_online_alter_log_max_size
配置选项控制。此功能是MySQL 5.5 中 Fast Index Creation功能 的增强。
- 乐观的
指导关系数据库系统的低级实施决策的方法。关系数据库中的性能和并发性要求意味着必须快速启动或调度操作。一致性和 参照完整性的要求意味着任何操作都可能失败:一个事务可能被回滚,一个 DML操作可能违反约束,锁请求可能导致死锁,网络错误可能导致超时。乐观策略假设大多数请求或尝试都成功,因此为失败情况做准备的工作相对较少。当这个假设成立时,数据库几乎不会做不必要的工作;当请求确实失败时,必须做额外的工作来清理和撤消更改。
InnoDB
对锁定和 提交等操作使用乐观策略。例如,事务更改的数据可以在提交发生之前写入数据文件,从而使提交本身非常快,但是如果事务回滚则需要更多的工作来撤消更改。乐观策略的对立面是 悲观策略,系统经过优化以处理不可靠且经常失败的操作。这种方法在数据库系统中很少见,因为在选择可靠的硬件、网络和算法时非常谨慎。
- 优化器
- 选项
MySQL 的配置参数,存储在 选项文件中或通过命令行传递。
对于适用于 InnoDB表的选项,每个选项名称都以前缀开头。
innodb_
- 选项文件
包含MySQL 实例 配置 选项的文件。传统上,在 Linux 和 Unix 上这个文件被命名为
my.cnf
,而在 Windows 上它被命名为my.ini
.- 溢出页
单独分配的磁盘页面 包含变长列(例如
BLOB
和VARCHAR
),这些列太长而无法放在B 树 页面上。关联的列称为 离页列。
P
- .par 文件
包含分区定义的文件。具有此扩展名的文件包含在由 MySQL Enterprise Backup 产品 的
mysqlbackup
命令生成的 备份中。InnoDB
随着MySQL 5.7.6 中 对表的本机分区支持的引入,.par
不再为分区InnoDB
表创建文件。分区MyISAM
表继续使用.par
MySQL 5.7 中的文件。在 MySQL 8.0 中,分区支持仅由InnoDB
存储引擎提供。因此,.par
从 MySQL 8.0 开始不再使用文件。- 页
一个单位,表示在磁盘(数据文件)和内存( 缓冲池
InnoDB
) 之间的任一时刻有 多少数据传输。一页可以包含一行或多行,具体取决于每行中的数据量。如果一行不能完全放入一页,则设置额外的指针式数据结构,以便可以将有关该行的信息存储在一页中。InnoDB
在每页中容纳更多数据的一种方法是使用 压缩行格式。对于使用 BLOB 或大文本字段的表, 紧凑行格式允许将这些大列与行的其余部分分开存储,从而减少不引用这些列的查询的 I/O 开销和内存使用量。
当
InnoDB
批量读取或写入页面集以增加 I/O 吞吐量时,它会一次读取或写入一个 范围。MySQL 实例中的所有
InnoDB
磁盘数据结构共享相同的页面大小。- 页面清洁器
从 缓冲池中清除 脏页 的
InnoDB
后台 线程。在 MySQL 5.6 之前,此活动由 主线程执行。页面清理器线程的数量由 MySQL 5.7.4 中引入的配置选项控制。innodb_page_cleaners
- 页面大小
对于 MySQL 5.5 及之前的版本,每个
InnoDB
页面的大小 固定为 16 KB。此值代表一种平衡:足够大以容纳大多数行的数据,但又足够小以最小化将不需要的数据传输到内存的性能开销。其他值未经测试或不支持。从 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
表空间,包括 系统表空间、 file-per-table 表空间和 通用表空间。较小的页面大小有助于提高使用小块大小的存储设备的性能,特别是对于 磁盘绑定工作负载(例如OLTP应用程序)中的SSD设备 。随着个别行的更新,更少的数据被复制到内存、写入磁盘、重组、锁定等。
另见disk-bound,file-per-table,general tablespace,instance,OLTP,page,SSD,system tablespace,tablespace。
- 父表
外键关系中 的表,它保存从子表 指向的初始列值。删除或更新父表中的行的结果取决于外键定义中的
ON UPDATE
和ON DELETE
子句。可以依次自动删除或更新子表中具有相应值的行,或者将这些列设置为NULL
,或者阻止操作。- 部分备份
- 部分索引
- 部分信任
托管提供商通常使用的执行环境,其中应用程序具有某些权限但没有其他权限。例如,应用程序可能能够通过网络访问数据库服务器,但在读取和写入本地文件方面 处于“沙盒”状态。
另见连接器/NET。
- 性能模式
在
performance_schema
MySQL 5.5 及更高版本中,模式提供了一组表,您可以查询这些表以获取有关 MySQL 服务器许多内部部分的性能特征的详细信息。请参阅 第 25 章,MySQL 性能模式。- Perl
一种起源于 Unix 脚本和报告生成的编程语言。结合了高性能正则表达式和文件 I/O。通过 CPAN 等存储库提供大量可重用模块。
另请参阅Perl API。
- 接口
用Perl语言编写的 MySQL 应用程序 的开源API 。通过和 模块实现。有关详细信息,请参阅 第 27.9 节,“MySQL Perl API”。
DBI
DBD::mysql
- 持久统计
一种将表的索引 统计信息存储在磁盘上的功能,可为 查询提供更好的计划稳定性。有关详细信息,请参阅第 14.8.11.1 节,“配置持久优化器统计参数”。
InnoDB
- 悲观
一种为了安全而牺牲性能或并发性的方法。如果很大比例的请求或尝试可能会失败,或者如果失败请求的后果很严重,那么它是合适的。
InnoDB
使用所谓的悲观 锁定策略,以尽量减少死锁的机会。在应用程序级别,您可以通过在一开始就获取事务所需的所有锁的悲观策略来避免死锁。许多内置数据库机制使用相反的 乐观方法。
- 幻影
出现在查询结果集中但不出现在较早查询的结果集中的行。例如,如果一个查询在一个事务中运行两次,与此同时,另一个事务在插入新行或更新行后提交,以便它与
WHERE
查询的子句匹配。这种情况称为幻读。它比不可重复读取更难防范,因为锁定第一个查询结果集中的所有行并不能阻止导致幻像出现的更改。
在不同的隔离级别中,幻读被 序列化读级别阻止,而被可重复读、 一致读和 读未提交级别允许。
- 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
) 和连接器/PHP。有关详细信息,请参阅MySQL 和 PHP。- 身体的
一种涉及硬件相关方面的操作类型,例如磁盘块、内存页、文件、位、磁盘读取等。通常,物理方面在专家级性能调整和问题诊断期间很重要。与逻辑对比。
- 物理备份
复制实际数据文件的备份。例如, MySQL Enterprise Backup
mysqlbackup
产品的 命令产生物理备份,因为它的输出包含服务器可以直接使用的数据文件 ,从而使恢复操作更快 。与逻辑备份对比。mysqld
另见备份、逻辑备份、MySQL 企业备份、恢复。
- PITR
另请参阅时间点恢复。
- 计划稳定性
- 时间点恢复
还原 备份以在特定日期和时间重新创建数据库状态的过程。通常缩写为 “ PITR ”。因为指定时间不太可能与备份时间完全对应,所以这种技术通常需要 物理备份和 逻辑备份相结合。例如,使用MySQL Enterprise Backup产品,您可以恢复在指定时间点之前进行的最后一次备份,然后从备份时间到 PITR 时间之间的 二进制日志中重放更改。
另见备份、二进制日志、逻辑备份、MySQL 企业备份、物理备份。
- 港口
数据库服务器侦听的 TCP/IP 套接字数,用于建立连接。通常与 主机一起指定。根据您对网络加密的使用,可能有一个端口用于未加密的流量,另一个端口用于 SSL连接。
- 字首
请参阅索引前缀。
- 准备好的备份
MySQL Enterprise Backup 产品在应用 二进制日志和 增量备份的所有阶段完成后 生成的一组备份文件 。生成的文件已准备好 恢复。在应用步骤之前,这些文件被称为原始备份。
- 准备好的声明
预先分析以确定高效执行计划的 SQL 语句。可以多次执行,没有每次解析分析的开销。
WHERE
通过使用占位符,每次都可以用不同的值替换子句中的文字 。这种替换技术提高了安全性,防止某些类型的 SQL 注入攻击。您还可以减少将返回值转换和复制到程序变量的开销。虽然您可以直接通过 SQL 语法使用准备好的语句,但是各种连接器 都有用于操作准备好的语句的编程接口,并且这些 API 比通过 SQL 更有效。
- 首要的关键
一组列——暗示,基于这组列的索引——可以唯一标识表中的每一行。因此,它必须是不包含任何
NULL
值的唯一索引。InnoDB
要求每张表都有这样的索引(也叫聚簇索引或聚簇索引),根据主键的列值来组织表存储。选择主键值时,请考虑使用任意值(合成键),而不是依赖从其他来源派生的值( 自然键)。
- 过程
正在执行的程序的实例。操作系统在多个运行进程之间切换,允许一定程度的并发。在大多数操作系统上,进程可以包含共享资源的多个 执行线程。线程之间的上下文切换比进程之间的等效切换更快。
- 伪记录
See Also infimum record , locking , supremum record。
- 线程
POSIX 线程标准,它定义了用于 Unix 和 Linux 系统上的线程和锁定操作的 API。在 Unix 和 Linux 系统上,
InnoDB
将此实现用于mutexes。另见互斥体。
- 清除
一种由一个或多个单独的后台线程(由 控制
innodb_purge_threads
)执行的垃圾收集,该线程按定期计划运行。清除从 历史列表中解析和处理 撤消日志页,目的是删除标记为删除(由先前的 语句)并且不再需要 MVCC或 回滚的聚簇和二级索引记录。清除处理后从历史列表中释放撤消日志页面。DELETE
- 清除缓冲
将操作产生的对二级索引页面的更改存储
DELETE
在 更改缓冲区中而不是立即写入更改的技术,以便可以执行物理写入以最大限度地减少随机 I/O。(因为删除操作是一个两步过程,此操作缓冲通常清除先前标记为删除的索引记录的写入。)它是 更改缓冲的一种类型;其他的是插入缓冲和 删除缓冲。- 清除滞后
InnoDB
历史列表 的别称。与innodb_max_purge_lag
配置选项相关。- 清除线程
进程中专用于执行定期清除 操作 的 线程。 在 MySQL 5.6 及更高版本中,配置选项 启用了多个清除线程 。
InnoDB
innodb_purge_threads
- Python
一种用于广泛领域的编程语言,从 Unix 脚本到大型应用程序。包括运行时类型、内置高级数据类型、面向对象的特性和广泛的标准库。通常用作其他语言编写的组件之间的 “胶水”语言。MySQL Python API 是开源的MySQLdb 模块。
另请参阅MySQLdb、Python API。
- Python API
问
- 询问
在SQL中,从一个或多个 表中读取信息的操作。根据数据的组织和查询的参数,可以通过查询 索引来优化查找。如果涉及多个表,则查询称为 join。
由于历史原因,有时在讨论语句的内部处理时会使用广义上的 “查询” ,包括其他类型的 MySQL 语句,如DDL和 DML语句。
- 查询执行计划
优化器做出的关于如何最有效地执行查询的一组决策,包括使用哪个或哪些索引,以及连接表 的顺序 。计划稳定性涉及对给定查询始终如一地做出相同的选择。
- 查询日志
请参阅一般查询日志。
- 停顿
为了减少数据库活动量,通常是在准备操作,例如 an
ALTER TABLE
、backup或 shutdown。可能涉及也可能不涉及尽可能多的刷新 ,以便InnoDB 不会继续执行后台 I/O。在 MySQL 5.6 及更高版本中,该语法
FLUSH TABLES ... FOR EXPORT
将一些数据写入磁盘以用于InnoDB
表,这使得通过复制数据文件来备份这些表变得更加简单。
R
- R树
用于多维数据(例如地理坐标、矩形或多边形)的空间索引的树数据结构。
另见B 树。
- 袭击
“廉价驱动器冗余阵列”的 缩写。将 I/O 操作分散到多个驱动器可在硬件级别实现更高的并发性,并提高低级别写入操作的效率,否则这些操作将按顺序执行。
另见并发。
- 随机潜水
一种快速估计列中不同值的数量(列的 基数)的技术。
InnoDB
从索引中随机抽样页面并使用该数据来估计不同值的数量。另见基数。
- 原始备份
MySQL Enterprise Backup产品 生成的初始备份文件集, 在 二进制日志中反映的更改和应用任何 增量备份之前。在此阶段,文件尚未准备好 恢复。应用这些更改后,这些文件称为 准备好的备份。
- 读已提交
为了提高性能,使用 锁定策略 的隔离级别放宽了 事务之间的一些保护。事务看不到其他事务未提交的数据,但可以看到当前事务启动后另一个事务提交的数据。因此,事务永远不会看到任何坏数据,但它确实看到的数据可能在某种程度上取决于其他事务的时间。
当具有此隔离级别的事务执行
UPDATE ... WHERE
或DELETE ... WHERE
操作时,其他事务可能必须等待。该事务可以执行SELECT ... FOR UPDATE
, 和LOCK IN SHARE MODE
操作而无需让其他事务等待。SELECT ... FOR SHARE
SELECT ... LOCK IN SHARE MODE
在 MySQL 8.0.1 中 替换,但LOCK IN SHARE MODE
仍然可用于向后兼容。- 阅读现象
- 读未提交
在事务之间提供最少保护 的隔离级别。查询采用锁定 策略,允许它们在通常等待另一个事务的情况下继续进行。然而,这种额外的性能是以不太可靠的结果为代价的,包括已被其他事务更改但尚未提交的数据(称为脏读)). 请谨慎使用此隔离级别,并注意结果可能不一致或不可重现,具体取决于其他事务同时在做什么。通常,具有此隔离级别的事务仅执行查询,而不执行插入、更新或删除操作。
- 阅读视图
的MVCC机制 使用的内部快照
InnoDB
。某些 事务,根据它们的隔离级别,会看到事务(或在某些情况下,语句)开始时的数据值。使用读取视图的隔离级别是可重复读取、 已提交读取和 未提交读取。另请参见隔离级别、MVCC、READ COMMITTED、READ UNCOMMITTED、REPEATABLE READ、事务。
- 预读
一种 I/O 请求类型,它异步地将一组 页面(整个 范围)预取到 缓冲池中,以防很快需要这些页面。线性预读技术根据前一范围内页面的访问模式预取一个范围内的所有页面。一旦缓冲池中有一定数量的来自同一范围的页面,随机预读技术就会预取该范围的所有页面。随机预读不是MySQL 5.5的一部分,而是在
innodb_random_read_ahead
配置选项的控制下在MySQL 5.6中重新引入。- 只读事务
一种事务类型,可以通过消除为每个事务
InnoDB
创建 读取视图所涉及的一些簿记来针对表进行优化。只能执行非锁定读查询。它可以使用 syntax 显式启动START TRANSACTION READ ONLY
,也可以在特定条件下自动启动。有关详细信息,请参阅第 8.5.3 节,“优化 InnoDB 只读事务”。- 记录锁
索引记录上的 锁。例如,
SELECT c1 FROM t WHERE c1 = 10 FOR UPDATE;
防止任何其他事务插入、更新或删除值为 10 的行 。与gap lock和 next-key lockt.c1
对比 。- 重做
当 DML语句对表进行更改 时 ,记录在 重做日志中的数据,以记录为单位。它在 崩溃恢复期间用于纠正由不完整 事务写入的数据。不断增加的LSN值表示通过重做日志的重做数据的累积量。
InnoDB
- 重做日志
崩溃恢复 期间使用的基于磁盘的数据结构 ,用于更正由不完整 事务写入的数据。在正常操作期间,它对更改
InnoDB
表数据的请求进行编码,这些请求是由 SQL 语句或低级 API 调用产生的。 在意外关闭之前未完成更新数据文件的修改将 自动重放。重做日志在磁盘上物理表示为一组重做日志文件。重做日志数据根据受影响的记录进行编码;这些数据统称为 重做。通过重做日志的数据通道由不断增加的 LSN值表示。
有关详细信息,请参阅第 14.6.6 节,“重做日志”
- 重做日志归档
启用后,按顺序将重做日志记录写入存档文件的
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。您仍然可以指定REDUNDANT行格式以与旧InnoDB
表兼容。有关更多信息,请参阅第 14.11 节,“InnoDB 行格式”。
- 参照完整性
始终以一致的格式维护数据的技术,是ACID哲学的一部分。特别是,不同表中的数据通过使用外键约束保持一致,这可以防止更改发生或自动将这些更改传播到所有相关表。相关机制包括防止错误插入重复值的唯一约束和防止错误插入空白值 的NOT NULL 约束。
- 相关的
现代数据库系统的一个重要方面。数据库服务器对一对一、一对多、多对一和唯一性等关系进行编码和实施。例如,一个人在地址数据库中可能有零个、一个或多个电话号码;一个电话号码可能与多个家庭成员相关联。在财务数据库中,可能要求一个人只有一个纳税人 ID,而任何纳税人 ID 只能与一个人相关联。
数据库服务器可以使用这些关系来防止插入错误数据,并找到查找信息的有效方法。例如,如果一个值被声明为唯一的,服务器可以在找到第一个匹配项后立即停止搜索,并且可以拒绝插入相同值的第二个副本的尝试。
在数据库级别,这些关系通过 SQL 功能表示,例如表中的列 、唯一性和
NOT NULL
约束、 外键和不同类型的连接操作。复杂的关系通常涉及多个表之间的数据拆分。通常,数据是规范化的,因此一对多关系中的重复值只存储一次。在数学环境中,数据库中的关系源自集合论。例如,子句的
OR
andAND
运算符WHERE
表示并集和交集的概念。- 关联
在全文搜索 功能中,一个数字表示搜索字符串与FULLTEXT 索引中的数据之间的相似性。例如,当您搜索单个词时,与只出现一次的行相比,该词与在文本中多次出现的行的相关性通常更高。
- 可重复读
的 默认隔离级别。
InnoDB
它可以防止查询的任何行被其他 事务更改,从而阻止 不可重复读取,但不会 阻止幻读。它使用适度严格的锁定 策略,以便事务中的所有查询都看到来自同一快照的数据,即事务开始时的数据。当具有此隔离级别的事务执行
UPDATE ... WHERE
、DELETE ... WHERE
、SELECT ... FOR UPDATE
和LOCK IN SHARE MODE
操作时,其他事务可能必须等待。SELECT ... FOR SHARE
SELECT ... LOCK IN SHARE MODE
在 MySQL 8.0.1 中 替换,但LOCK IN SHARE MODE
仍然可用于向后兼容。- 曲目
曲目是适用于字符集的术语。字符集曲目是集中字符的集合。请参阅 第 10.2.1 节,“字符集指令表”。
- 复制品
复制拓扑中 的数据库服务器计算机, 它从另一台服务器( 源)接收更改并应用这些相同的更改。因此它保持与源相同的内容,尽管它可能有些落后。
在 MySQL 中,副本通常用于灾难恢复,以取代发生故障的源。它们还常用于测试软件升级和新设置,以确保数据库配置更改不会导致性能或可靠性问题。
副本通常具有高工作负载,因为它们处理从源中继的所有DML(写入)操作以及用户查询。为了确保副本能够足够快地应用来自源的更改,它们通常具有快速 I/O 设备以及足够的 CPU 和内存来在同一台服务器上运行多个数据库实例。例如,源可能使用硬盘驱动器存储,而副本使用SSD。
- 复制
将更改从 源发送到一个或多个 副本的做法,以便所有数据库都具有相同的数据。该技术具有广泛的用途,例如用于更好的可伸缩性的负载平衡、灾难恢复以及测试软件升级和配置更改。可以通过称为row-based replication和statement-based replication的方法在数据库之间发送更改。
- 恢复
将 MySQL Enterprise Backup产品中的一组备份文件放置到位以供 MySQL 使用的过程。可以执行此操作来修复损坏的数据库,返回到某个较早的时间点,或者(在复制 上下文中)设置新的 副本。在 MySQL Enterprise Backup 产品中,这个操作是通过命令的
copy-back
选项来执行的mysqlbackup
。另请参阅热备份、MySQL 企业备份、mysqlbackup 命令、准备好的备份、副本、复制。
- 回滚
结束事务 的SQL语句 ,撤消事务所做的任何更改。它与 commit相反,它使事务中所做的任何更改永久化。
默认情况下,MySQL 使用 自动提交设置,它会在每个 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
的行格式, 请InnoDB
在INFORMATION_SCHEMA
.- 行锁
防止行被另一个 事务以不兼容的方式访问 的锁。同一个表中的其他行可以被其他事务自由写入。这是DML操作在 InnoDB表 上完成 的锁定类型。
与无法使用 联机 DDL完成的表的DDL操作 或在 表上使用的表锁进行 对比;这些锁会阻止对表的并发访问。
MyISAM
InnoDB
- 基于行的复制
一种复制形式,其中从指定如何更改副本上的各个行的源传播事件 。可以安全地用于 选项的所有设置。
innodb_autoinc_lock_mode
另请参见自动增量锁定、innodb_autoinc_lock_mode、replica、replication、source、statement-based replication。
- 行级锁定
用于 InnoDB表 的锁定机制,依赖于 行锁而不是 表锁。多个 事务可以同时修改同一个表。只有当两个事务试图修改同一行时,一个事务才会等待另一个事务完成(并释放其行锁)。
- 红宝石
- 红宝石API
mysql2
,基于 libmysqlclient API 库,可供开发 MySQL 应用程序的 Ruby 程序员使用。有关详细信息,请参阅第 27.11 节,“MySQL Ruby API”。- 读写锁
低级对象,
InnoDB
用于表示和执行 遵循特定规则的内部内存数据结构的共享访问锁。与mutexes对比 ,后者InnoDB
用于表示和强制执行对内部内存数据结构的独占访问。Mutexes 和 rw-locks 统称为 latches。rw-lock
类型包括s-locks
(共享锁)、x-locks
(独占锁)和sx-locks
(共享-独占锁)。An
s-lock
提供对公共资源的读取访问权限。An
x-lock
提供对公共资源的写访问,同时不允许其他线程进行不一致的读取。An
sx-lock
提供对公共资源的写访问,同时允许其他线程进行不一致的读取。sx-locks
在 MySQL 5.7 中引入,以优化并发性并提高读写工作负载的可扩展性。
以下矩阵总结了 rw-lock 类型兼容性。
S
SX
X
S
兼容的 兼容的 冲突 SX
兼容的 冲突 冲突 X
冲突 冲突 冲突
小号
- 保存点
保存点有助于实现嵌套 事务。它们可用于为作为较大事务一部分的表的操作提供范围。例如,在预订系统中安排一次旅行可能涉及预订多个不同的航班;如果所需航班不可用,您可以 回滚预订该航程所涉及的更改,而不回滚之前成功预订的航班。
- 可扩展性
能够向系统添加更多工作并同时发出更多请求,而不会因超出系统容量限制而导致性能突然下降。软件架构、硬件配置、应用程序编码和工作负载类型都对可扩展性有影响。当系统达到其最大容量时,增加可扩展性的流行技术是向上扩展 (增加现有硬件或软件的容量)和 向外扩展(添加新服务器和更多 MySQL 实例)。通常与可用性配对 作为大规模部署的关键方面。
- 向外扩展
一种 通过添加新服务器和更多 MySQL 实例来提高可伸缩性的技术。例如,设置复制、NDB Cluster、连接池或跨一组服务器分散工作的其他功能。与放大对比 。
- 放大
一种 通过增加现有硬件或软件的容量来提高可扩展性的技术。例如增加服务器内存,调整内存相关参数,如
innodb_buffer_pool_size
和innodb_buffer_pool_instances
. 与横向扩展对比。- 图式
从概念上讲,模式是一组相互关联的数据库对象,例如表、表列、列的数据类型、索引、外键等。这些对象通过 SQL 语法连接起来,因为列组成表,外键引用表和列,等等。理想情况下,它们也逻辑连接,作为统一应用程序或灵活框架的一部分一起工作。例如,INFORMATION_SCHEMA 和performance_schema 数据库在名称中使用“ schema ”来强调它们包含的表和列之间的密切关系。
在 MySQL 中,从物理上讲,模式 与数据库同义。您可以在 MySQL SQL 语法中替换关键字
SCHEMA
instead ofDATABASE
,例如使用CREATE SCHEMA
instead ofCREATE DATABASE
。其他一些数据库产品也有所区别。例如,在 Oracle 数据库产品中, 模式仅表示数据库的一部分:表和其他对象由单个用户拥有。
另请参见数据库、INFORMATION_SCHEMA、性能模式。
- 搜索索引
在 MySQL 中,全文搜索 查询使用一种特殊的索引,即 FULLTEXT 索引。在 MySQL 5.6.4 及以上版本中,
InnoDB
表MyISAM
都支持FULLTEXT
索引;以前,这些索引仅适用于MyISAM
表。- 二级索引
一种表示表列子集的
InnoDB
索引。一个InnoDB
表可以有零个、一个或多个二级索引。(对比 聚簇索引,它是每个InnoDB
表都需要的,存储所有表列的数据。)二级索引可用于满足仅需要索引列中的值的查询。对于更复杂的查询,它可用于识别表中的相关行,然后使用聚簇索引通过查找检索这些行。
创建和删除二级索引传统上涉及复制
InnoDB
表中所有数据的大量开销。快速索引创建功能使二级索引 的CREATE INDEX
andDROP INDEX
语句更快。InnoDB
- 部分
InnoDB
表空间 内的一个分区。如果表空间类似于目录,则段类似于该目录中的文件。一个段可以增长。可以创建新的段。例如,在 file-per-table 表空间中,表数据在一个段中,每个关联的索引在其自己的段中。系统表空间包含许多不同的段,因为它可以容纳许多表及其关联的索引。在 MySQL 8.0 之前,系统表空间还包含一个或多个 用于 undo logs的回滚段。
段随着数据的插入和删除而增长和收缩。当一个段需要更多空间时,它一次扩展一个 范围(1 兆字节)。类似地,当不再需要该范围内的所有数据时,段会释放该范围内的空间价值。
另见extent,file-per-table,rollback segment,system tablespace,tablespace,undo log。
- 选择性
数据分布的一个属性,列中不同值的数量(其基数)除以表中的记录数。高选择性意味着列值相对唯一,可以通过索引高效检索。如果您(或查询优化器)可以预测
WHERE
子句中的测试仅匹配表中的少量(或部分)行,则如果它首先使用索引评估该测试 ,则整个查询往往是有效的。- 半一致读
一种用于
UPDATE
语句的读取操作,它是READ COMMITTED和consistent read的组合。当UPDATE
语句检查已锁定的行时,InnoDB
将最新提交的版本返回给 MySQL,以便 MySQL 可以确定该行是否匹配WHERE
.UPDATE
如果行匹配(必须更新),MySQL 再次读取该行,这次InnoDB
要么锁定它,要么等待锁定它。只有当事务具有 READ COMMITTED隔离级别或innodb_locks_unsafe_for_binlog
启用该选项 时,才会发生这种类型的读取操作 。innodb_locks_unsafe_for_binlog
在 MySQL 8.0 中被删除。- 可序列化
使用最保守锁定策略的隔离级别,以防止任何其他 事务插入或更改此事务读取的数据,直到它完成。这样,同一个查询就可以在一个事务中反复运行,并且确保每次都能检索到相同的结果集。任何更改自当前事务开始以来由另一个事务提交的数据的尝试都会导致当前事务等待。
这是 SQL 标准指定的默认隔离级别。实际上,很少需要这种严格程度,因此默认的隔离级别
InnoDB
是下一个最严格的 REPEATABLE READ。- 服务器
一种连续运行的程序,等待接收来自另一个程序( 客户端)的请求并根据请求采取行动。因为通常整台计算机专用于运行一个或多个服务器程序(例如数据库服务器、Web 服务器、应用程序服务器或它们的某种组合),所以术语 服务器也可以指运行服务器软件的计算机.
- 服务器端准备好的语句
由 MySQL 服务器管理的 准备好的语句。从历史上看,服务器端准备语句的问题导致Connector/J和 Connector/PHP开发人员有时改用客户端准备语句。对于现代 MySQL 服务器版本,建议使用服务器端准备好的语句来提高性能、可伸缩性和内存效率。
- 小服务程序
另见连接器/J。
- 共享锁
- 共享表空间
另一种引用系统表空间或通用表空间的方式。通用表空间是在 MySQL 5.7 中引入的。多个表可以驻留在一个共享表空间中。只有一个表可以驻留在 file-per-table 表空间中。
- 尖锐的检查站
将其重做条目包含在 重做日志的特定部分中的所有脏缓冲池页面刷新到磁盘 的过程。在重用日志文件的一部分之前发生 ;日志文件以循环方式使用。通常发生在写入密集型工作负载中。
InnoDB
- 关闭
停止MySQL服务器的过程。默认情况下,此进程会清理 InnoDB表的操作,因此 关闭速度较慢,但稍后启动速度会
InnoDB
很快 。如果跳过清理操作, 关机速度很快,但必须在下次重启时进行清理。的关闭模式
InnoDB
由innodb_fast_shutdown
选项控制。- 奴隶
见副本。
- 慢查询日志
一种日志类型,用于对 MySQL 服务器处理的 SQL 语句进行性能调优。日志信息存储在一个文件中。您必须启用此功能才能使用它。您可以控制记录哪些类别的 “慢速” SQL 语句。有关详细信息,请参阅第 5.4.5 节,“慢速查询日志”。
- 慢关机
一种关闭类型,在完成之前执行额外的
InnoDB
刷新操作。也称为干净关机。由配置参数innodb_fast_shutdown=0
或命令指定SET GLOBAL innodb_fast_shutdown=0;
。虽然关机本身可能需要更长的时间,但应该在随后的启动中节省该时间。- 快照
- 排序缓冲区
在创建
InnoDB
索引期间用于对数据进行排序的缓冲区。innodb_sort_buffer_size
使用配置选项 配置排序缓冲区大小 。- 资源
复制方案中 的数据库服务器计算机, 用于处理初始插入、更新和删除数据请求。这些更改被传播到其他称为副本的服务器并在其上重复。
- 空间编号
用于在 MySQL 实例 中唯一标识
InnoDB
表空间的标识符。系统表空间的空间 ID始终为零;这个相同的 ID 适用于系统表空间或通用表空间内的所有表。每个file-per-table 表 空间和通用表空间都有自己的空间 ID。在 MySQL 5.6 之前,这个硬编码值
InnoDB
在 MySQL 实例之间移动表空间文件时存在困难。从 MySQL 5.6 开始,您可以使用 涉及语句、和的可传输表空间功能在实例之间复制表空间文件。调整空间 ID 所需的信息 包含在与表空间一起复制的.cfg 文件中。有关详细信息,请参阅 第 14.6.1.3 节,“导入 InnoDB 表”。FLUSH TABLES ... FOR EXPORT
ALTER TABLE ... DISCARD TABLESPACE
ALTER TABLE ... IMPORT TABLESPACE
- 稀疏文件
一种通过将表示空块的元数据写入磁盘而不是写入实际空白空间来更有效地使用文件系统空间的文件类型。
InnoDB
透明页面压缩 功能依赖于稀疏文件支持。有关更多信息,请参阅 第 14.9.2 节,“InnoDB 页面压缩”。- 旋转
一种持续测试资源是否可用的等待操作。这种技术用于通常只持有很短时间的资源,在这种情况下,在 “忙循环”中等待比让线程休眠并执行上下文切换更有效。如果资源在短时间内不可用,则自旋循环停止并使用另一种等待技术。
- 春天
一个基于 Java 的应用程序框架,旨在通过提供一种配置组件的方法来协助应用程序设计。
另请参阅J2EE。
- 数据库
执行数据库操作的标准结构化查询语言。通常分为 DDL、 DML和 查询类别。MySQL 包括一些额外的语句类别,例如 复制。请参阅 第 9 章,SQL 语法构建块的语言结构,第 11 章,数据类型,了解用于 MySQL 表列的数据类型,第 13 章,SQL 语句 ,了解有关 SQL 语句及其相关类别的详细信息,以及第 12 章,函数和运营商用于在查询中使用的标准和 MySQL 特定函数。
- SQL状态
- 固态硬盘
“固态硬盘”的 缩写。一种具有不同于传统硬盘驱动器 ( HDD ) 性能特征的存储设备:存储容量更小、随机读取速度更快、没有移动部件,并且有许多影响写入性能的考虑因素。它的性能特征会影响 磁盘绑定工作负载的吞吐量。
- SSL
- 启动
启动MySQL服务器的过程。通常由第 4.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
语句时刷新。您可以通过 配置选项 控制在计算统计信息时如何处理 NULL值。
innodb_stats_method
通过INFORMATION_SCHEMA和 PERFORMANCE_SCHEMA表 ,其他类型的统计信息可用于数据库对象和数据库活动 。
另请参见基数、索引、INFORMATION_SCHEMA、NULL、性能模式、持久统计信息、主键、查询执行计划、二级索引、表、事务。
- 词干
能够根据一个共同的词根搜索一个词的不同变体,例如单数和复数,或者过去、现在和将来的动词时态。此功能目前在
MyISAM
全文搜索功能中受支持,但在表的FULLTEXT 索引中 不支持InnoDB
。- 停用词
在FULLTEXT 索引中,一个被认为足够常见或琐碎的词,以至于它从搜索索引中省略并在搜索查询中被忽略。
InnoDB
不同的配置设置控制和MyISAM
表的停用词处理。有关详细信息,请参阅 第 12.10.4 节,“全文停用词”。- 存储引擎
MySQL 数据库的一个组件,执行存储、更新和查询数据的低级工作。在 MySQL 5.5 及更高版本中,InnoDB是新表的默认存储引擎,取代了
MyISAM
. 不同的存储引擎在设计时会在内存使用与磁盘使用、读取速度与写入速度以及速度与稳健性等因素之间进行不同的权衡。每个存储引擎管理特定的表,所以我们引用InnoDB
表、MyISAM
表等。MySQL Enterprise Backup产品 针对 备份
InnoDB
表进行了优化。它还可以备份由MyISAM
其他存储引擎处理的表。- 存储生成列
其值是根据列定义中包含的表达式计算的列。在插入或更新行时评估和存储列值。存储的生成列需要存储空间并且可以被索引。
与虚拟生成列 对比。
- 存储对象
- 存储程序
- 存储例程
- 严格模式
由
innodb_strict_mode
选项控制的设置的通用名称。打开此设置会导致某些通常被视为警告的情况被视为错误。例如,某些与 文件格式和 行格式相关的无效选项组合,通常会产生警告并继续使用默认值,现在会导致CREATE TABLE
操作失败。innodb_strict_mode
在 MySQL 5.7 中默认启用。MySQL 也有严格模式。请参阅 第 5.1.10 节,“服务器 SQL 模式”。
- 子列表
在表示 缓冲池的列表结构中,相对较旧和相对较新的页面由列表的不同部分表示。一组参数控制这些部分的大小以及新旧页面之间的分界点。
- 最高记录
索引中的伪记录,代表该索引中最大值之上的差距。如果一个事务有一个语句,例如
SELECT ... FROM ... WHERE col > 10 FOR UPDATE;
,并且该列中的最大值是 20,它是对 supremum 记录的锁定,可以防止其他事务插入更大的值,例如 50、100 等等。- 代理键
另见合成密钥。
- 合成密钥
索引列,通常是主键,其中的值是任意分配的。通常使用自动增量 列来完成。通过将值视为完全任意的,您可以避免过度限制的规则和错误的应用程序假设。例如,如果员工被批准雇用但从未真正加入,则代表员工编号的数字序列可能会有差距。或者 100 号员工的雇用日期可能比 500 号员工的雇用日期晚,前提是他们离开公司后又重新加入。数值也会产生可预测长度的较短值。例如,存储表示“道路”的数字代码, “ Boulevard ” , “ Expressway ”等等比一遍又一遍地重复这些字符串更节省空间。
也称为代理键。与自然键对比。
另见auto-increment , natural key , primary key , surrogate key。
- 系统表空间
一个或多个数据文件(ibdata 文件)包含
InnoDB
相关对象的元数据(InnoDB
数据字典),以及 更改缓冲区、 双写缓冲区和可能的撤消日志的存储区域。InnoDB
如果表是在系统表空间而不是file-per-table或 general tablespaces中创建的,它还可能包含表的表和索引数据。系统表空间中的数据和元数据适用 于 MySQL 实例中的所有数据库。在 MySQL 5.6.7 之前,默认将所有
InnoDB
表和索引保留在系统表空间内,这通常会导致这个文件变得非常大。因为系统表空间永远不会收缩,所以如果加载并删除大量临时数据,可能会出现存储问题。在 MySQL 5.7 中,默认是 file-per-table模式,其中每个表及其关联的索引都存储在一个单独的 .ibd 文件中。InnoDB
这个默认值使得依赖梭子鱼文件格式的特性更容易使用,例如表压缩、离页列的高效存储, 和大索引键前缀 (innodb_large_prefix
)。该
innodb_undo_tablespaces
选项定义撤消日志的撤消表空间数。将所有表数据保存在系统表空间或单独的
.ibd
文件中通常会对存储管理产生影响。MySQL Enterprise Backup产品可能会备份一小组大文件或许多较小的文件。在具有数千个表的系统上,处理数千个文件的文件系统操作.ibd
可能会导致瓶颈。InnoDB
MySQL 5.7.6 中引入了通用表空间,也用.ibd
文件来表示。通用表空间是使用CREATE TABLESPACE
语法创建的共享表空间。它们可以在 MySQL 数据目录之外创建,能够容纳多个表,并支持所有行格式的表。另请参见梭子鱼、更改缓冲区、压缩、数据字典、数据库、双写缓冲区、动态行格式、file-per-table、通用表空间、.ibd 文件、ibdata 文件、innodb_file_per_table、实例、MySQL 企业备份、页外列、表空间,撤消日志。
吨
- .TRG文件
包含触发器参数的文件。具有此扩展名的文件始终包含在由 MySQL Enterprise Backup 产品 的
mysqlbackup
命令生成的 备份中。- .TRN 文件
包含触发器命名空间信息的文件。具有此扩展名的文件始终包含在由 MySQL Enterprise Backup 产品 的
mysqlbackup
命令生成的 备份中。- 桌子
每个 MySQL 表都与一个特定的 存储引擎相关联。 InnoDB表具有 影响性能、 可伸缩性、 备份、管理和应用程序开发 的特定物理和 逻辑特征。
在文件存储方面,
InnoDB
表属于以下表空间类型之一:共享
InnoDB
系统表空间,由一个或多个ibdata 文件组成。每个表 的文件表 空间,由一个单独的 .ibd 文件组成。
一个共享的通用表空间,由一个单独的
.ibd
文件组成。MySQL 5.7.6 中引入了通用表空间。
.ibd
数据文件包含表和 索引数据。InnoDB
在 file-per-table 表空间中创建的表可以使用 Barracuda文件格式,而 Barracuda 表可以使用 DYNAMIC或 COMPRESSED行格式。这些行格式支持InnoDB
诸如 压缩、页外列的有效存储和大索引键前缀等功能(请参阅 参考资料innodb_large_prefix
)。无论innodb_file_format
设置如何,通用表空间都支持所有行格式。直到 MySQL 5.7.5,
InnoDB
系统表空间内的表必须使用 Antelope文件格式才能向后兼容 MySQL 5.1 及更早版本。Antelope文件格式支持 COMPACT和 REDUNDANT行 格式。从 MySQL 5.7.6 开始,系统表空间支持使用 动态行格式的表。表的行被组织成
InnoDB
称为聚集索引的索引结构,条目根据表的 主键列排序。数据访问针对在主键列上过滤和排序的查询进行了优化,并且每个索引都包含每个条目的关联主键列的副本。修改任何主键列的值都是一项昂贵的操作。因此,表设计的一个重要方面InnoDB
是选择一个主键,其中包含最重要查询中使用的列,并保持主键简短,值很少更改。另请参见Antelope、备份、Barracuda、聚集索引、紧凑行格式、压缩行格式、压缩、动态行格式、快速索引创建、file-per-table、.ibd 文件、索引、页外列、主键、冗余行格式,行,系统表空间,表空间。
- 表锁
防止任何其他 事务访问表的锁。
InnoDB
通过使用 在线 DDL、 行锁和 处理 DML语句和 查询的一致读取等技术,我们做出了相当大的努力来使此类锁变得不必要。 您可以使用以下语句通过 SQL 创建这样的锁;从其他数据库系统或 MySQL 存储引擎迁移的步骤之一是在可行的情况下删除此类语句。LOCK TABLE
- 表格扫描
请参阅全表扫描。
- 表格统计
查看统计数据。
- 表格类型
- 表空间
一个数据文件,可以保存一个或多个
InnoDB
表和关联 索引的数据。系统表空间包含
InnoDB
数据字典,在 MySQL 5.6 之前InnoDB
默认包含所有其他表。该
innodb_file_per_table
选项在 MySQL 5.6 及更高版本中默认启用,允许在自己的表空间中创建表。File-per-table 表空间支持诸如高效存储 页外列、表压缩和可传输表空间等功能。有关详细信息,请参阅 第 14.6.3.2 节,“File-Per-Table 表空间”。InnoDB
在 MySQL 5.7.6 中引入了通用表空间。通用表空间是使用CREATE TABLESPACE
语法创建的共享表空间。它们可以在 MySQL 数据目录之外创建,能够容纳多个表,并支持所有行格式的表。MySQL NDB Cluster 还将其表分组到表空间中。有关详细信息,请参阅 第 21.6.11.1 节,“NDB Cluster 磁盘数据对象”。
另见压缩行格式、数据字典、数据文件、每表文件、通用表空间、索引、innodb_file_per_table、系统表空间、表。
- TCL
一种起源于 Unix 脚本世界的编程语言。有时通过用C、 C++或 Java编写的代码进行扩展 。对于 MySQL 的开源 Tcl API,请参阅 第 27.12 节,“MySQL Tcl API”。
另见API。
- 临时表
其数据不需要真正永久 的表。例如,临时表可能用作复杂计算或转换中中间结果的存储区域;崩溃后不需要恢复此中间数据。数据库产品可以采取各种捷径来提高对临时表的操作性能,方法是在将数据写入磁盘时不那么谨慎,并采取其他措施在重启时保护数据。
有时,数据本身会在设定的时间自动删除,例如交易结束或会话结束时。对于某些数据库产品,表本身也会自动删除。
另见表。
- 临时表空间
MySQL 5.7 中引入 的非压缩
InnoDB
临时表和相关对象的表空间。配置文件选项定义临时表空间数据文件的innodb_temp_data_file_path
相对路径、名称、大小和属性。如果innodb_temp_data_file_path
未指定,默认行为是ibtmp1
在数据目录中创建一个自动扩展的 12MB 数据文件。临时表空间在每次服务器启动时重新创建,并接收动态生成的空间 ID。临时表空间不能驻留在原始设备上。如果无法创建临时表空间,则拒绝启动。临时表空间在正常关闭或中止初始化时被删除。发生崩溃时不会删除临时表空间。在这种情况下,数据库管理员可以手动删除临时表空间或使用相同的配置重新启动服务器,从而删除并重新创建临时表空间。
另见临时表。
- 文字集
另见全文索引。
- 线
- 雄猫
一个开源的J2EE应用服务器,实现了 Java Servlet 和 JavaServer Pages 编程技术。由 Web 服务器和 Java servlet 容器组成。对于 MySQL,通常与Connector/J结合使用。
另请参阅J2EE。
- 破页
由于 I/O 设备配置和硬件故障的组合而可能发生的错误情况。如果数据以小于
InnoDB
页面大小(默认情况下为 16KB)的块写出,则写入时的硬件故障可能会导致仅部分页面存储到磁盘。双InnoDB
写缓冲区防止这种可能性。另见双写缓冲区。
- 生产总值
“ transactions per second ”的 首字母缩写词,有时在基准测试中使用的度量单位。它的值取决于特定基准测试所代表的 工作负载,以及您控制的因素,例如硬件容量和数据库配置。
- 交易
事务是可以 提交或 回滚的原子工作单元。当一个事务对数据库进行多次更改时,要么在事务提交时所有更改都成功,要么在事务回滚时所有更改都撤消。
由 实现的数据库事务 具有由首字母缩略词ACID
InnoDB
统称为原子性、一致性、隔离性和持久性的属性。- 交易编号
与每一行 关联的内部字段 。该字段通过
INSERT
、UPDATE
、 和DELETE
操作进行物理更改,以记录哪个 事务锁定了该行。- 透明页面压缩
InnoDB
MySQL 5.7.8 中添加的一项功能,允许对驻留在 file-per-table 表空间中的表 进行页级压缩。通过使用或 指定COMPRESSION
属性 启用页面压缩。有关更多信息,请参阅第 14.9.2 节,“InnoDB 页面压缩”。CREATE TABLE
ALTER TABLE
- 可传输表空间
一种允许将 表空间从一个实例移动到另一个实例的功能。传统上,这对于表空间是不可能的,
InnoDB
因为所有表数据都是系统表空间的一部分。在 MySQL 5.6 及更高版本中,FLUSH TABLES ... FOR EXPORT
语法InnoDB
为复制到另一台服务器准备一个表;运行ALTER TABLE ... DISCARD TABLESPACE
并ALTER TABLE ... IMPORT TABLESPACE
在另一台服务器上将复制的数据文件带入另一台实例。与.ibd 文件一起复制的单独的 .cfg 文件用于在导入表空间时更新表元数据(例如 空间 ID )。看第 14.6.1.3 节,“导入 InnoDB 表”获取使用信息。- 故障排除
- 截短
一种DDL操作,它删除表的全部内容,同时保持表和相关索引不变。与drop对比 。
DELETE
尽管从概念上讲它与没有子句的语句具有相同的结果WHERE
,但它在幕后的操作却不同:InnoDB
创建一个新的空表,删除旧表,然后重命名新表以取代旧表。因为这是 DDL 操作,所以无法回滚。如果被截断的表包含 引用另一个表的外键,则截断操作使用较慢的操作方法,一次删除一行,以便任何
ON DELETE CASCADE
子句都可以根据需要删除引用表中的相应行。(MySQL 5.5 及更高版本不允许这种较慢的截断形式,如果涉及外键则返回错误。在这种情况下,请改用DELETE
语句。- 信任库
另请参阅SSL。
- 元组
指定一组有序元素的技术术语。它是一个抽象概念,用于数据库理论的正式讨论。在数据库领域,元组通常由表行的列来表示。它们也可以由查询的结果集表示,例如,仅检索表的某些列或连接表中的列的查询。
另见游标。
- 两阶段提交
根据 XA规范, 属于分布式 事务一部分的操作。(有时缩写为 2PC。)当多个数据库参与事务时,要么所有数据库都 提交更改,要么所有数据库回滚更改。
ü
- 撤消
在事务 的整个生命周期中维护的数据 ,记录所有更改,以便在回滚操作的情况下可以撤消这些更改 。它存储在系统表空间 (在 MySQL 5.7 或更早版本中)或单独的 撤消表空间中的撤消日志中。从 MySQL 8.0 开始,撤消日志默认驻留在撤消表空间中。
- 撤消缓冲区
请参阅撤消日志。
- 撤消日志
保存活动事务 修改的数据副本的存储区域 。如果另一个事务需要查看原始数据(作为 一致读取操作的一部分),将从该存储区域中检索未修改的数据。
在 MySQL 5.6 和 MySQL 5.7 中,可以使用
innodb_undo_tablespaces
变量 have undo logs reside in undo tablespaces,它可以放在另一个存储设备上,比如SSD。在 MySQL 8.0 中,undo 日志驻留在 MySQL 初始化时创建的两个默认的 undo 表空间中,可以使用CREATE UNDO TABLESPACE
语法创建额外的 undo 表空间。撤消日志被分成不同的部分, 插入撤消缓冲区和 更新撤消缓冲区。
- 撤消日志段
撤消日志 的集合。撤消日志段存在于回滚段中。撤消日志段可能包含来自多个事务的撤消日志。undo log 段一次只能被一个事务使用,但在事务提交 或回滚时释放后可以重复使用。也可以称为“撤消段”。
- 撤消表空间
撤消表空间包含撤消日志。撤消日志存在于 撤消日志段中,而撤消日志段包含在回滚段中。回滚段传统上驻留在系统表空间中。从 MySQL 5.6 开始,回滚段可以驻留在撤消表空间中。在 MySQL 5.6 和 MySQL 5.7 中,undo 表空间的数量由
innodb_undo_tablespaces
配置选项控制。在 MySQL 8.0 中,在 MySQL 实例初始化时会创建两个默认的 undo 表空间,并且可以使用CREATE UNDO TABLESPACE
语法创建额外的 undo 表空间。有关详细信息,请参阅 第 14.6.3.4 节,“撤消表空间”。
- 统一码
以灵活和标准化的方式支持国家字符、字符集、代码页和其他国际化方面的系统。
Unicode 支持是 ODBC标准的一个重要方面。 Connector/ODBC 5.1 是一个 Unicode 驱动程序,而 Connector/ODBC 3.51 是一个 ANSI驱动程序。
- 唯一约束
一种断言列不能包含任何重复值的约束。在关系代数方面,它用于指定一对一关系。为了有效地检查是否可以插入一个值(即该值不存在于列中),底层唯一索引支持唯一约束。
- 唯一索引
具有 唯一约束的一列或一组列的索引。因为已知索引不包含任何重复值,所以某些类型的查找和计数操作比普通类型的索引更有效。大多数针对此类索引的查找只是为了确定某个值是否存在。索引中值的数量与表中的行数相同,或者至少与关联列具有非空值的行数相同。
更改缓冲优化不适用于唯一索引。作为解决方法,您可以
unique_checks=0
在将批量数据加载到InnoDB
表中时临时设置。- 唯一键
包含 唯一索引的一组列(一个或多个) 。当您可以定义
WHERE
与一行完全匹配的条件,并且查询可以使用关联的唯一索引时,可以非常有效地执行查找和错误处理。
V
- 可变长度类型
一种可变长度的数据类型。
VARCHAR
、VARBINARY
和 类型是变长类型BLOB
。TEXT
InnoDB
将长度大于或等于 768 字节的固定长度字段视为可变长度字段,可以将其存储在页外。例如,CHAR(255)
如果字符集的最大字节长度大于 3,则列可以超过 768 个字节,就像utf8mb4
.- 受害者
检测到死锁时自动选择回滚 的事务 。回滚更新最少行的事务。
InnoDB
可以使用
innodb_deadlock_detect
配置选项 禁用死锁检测。- 看法
- 虚拟专栏
请参阅虚拟生成列。
- 虚拟生成列
其值是根据列定义中包含的表达式计算的列。
BEFORE
不存储列值,但在任何触发器之后立即读取行时对其进行评估 。虚拟生成的列不占用存储空间。InnoDB
支持虚拟生成列的二级索引。与存储的生成列 对比。
- 虚拟索引
虚拟索引是一个或多个虚拟生成列或虚拟生成列与常规列或存储生成列的组合的二级索引。有关详细信息,请参阅 第 13.1.18.8 节,“二级索引和生成的列”。
- 视觉工作室
有关受支持的 Visual Studio 版本,请参阅以下参考资料:
连接器/NET:连接器/NET 版本
连接器/C++ 8.0: 平台支持和先决条件
W
- 等待
当无法立即完成 诸如获取 锁、 互斥锁或 锁存器
InnoDB
等操作时,暂停并重试。暂停机制非常详尽,以至于该操作有自己的名称 wait。InnoDB
使用内部调度、操作系统wait()
调用和短期自旋循环 的组合暂停单个线程。在具有重负载和许多事务的系统上,您可以使用
SHOW INNODB STATUS
命令或性能模式的输出 来确定线程是否花费了太多时间等待,如果是,如何提高 并发性。- 热备份
在数据库运行时进行的备份,但在备份过程中限制了某些数据库操作。例如,表可能变为只读。对于繁忙的应用程序和网站,您可能更喜欢热备份。
- 暖身
启动后在典型 工作负载下运行系统一段时间,以便缓冲池和其他内存区域像在正常情况下一样被填充。当 MySQL 服务器重新启动或承受新的工作负载时,此过程会随着时间的推移自然发生。
通常,您在运行性能测试之前运行工作负载一段时间以预热缓冲池,以确保多次运行的结果一致;否则,第一次运行时性能可能会人为降低。
innodb_buffer_pool_dump_at_shutdown
在 MySQL 5.6 中,您可以通过启用和 配置选项 来加速预热过程,以便在innodb_buffer_pool_load_at_startup
重启后将缓冲池的内容带回内存。这些选项在 MySQL 5.7 中默认启用。请参阅 第 14.8.3.6 节,“保存和恢复缓冲池状态”。- 工作量
SQL和其他数据库操作 的组合和数量 ,由数据库应用程序在典型或高峰使用期间执行。您可以在性能测试期间或在容量规划 期间使数据库承受特定工作负载以识别 瓶颈。
- 写入组合
一种优化技术,可在脏页从 缓冲池中刷新时 减少写操作 。如果一页中的一行被更新多次,或者同一页上的多行被更新,则所有这些更改都将通过一次写入操作存储到数据文件中,而不是每次更改都写入一次。
InnoDB
X
- XA
用于协调分布式 事务的标准接口,允许多个数据库参与事务,同时保持 ACID合规性。有关完整详细信息,请参阅第 13.3.7 节,“XA 事务”。
XA 分布式事务支持默认启用。如果您不使用此功能,则可以禁用该
innodb_support_xa
配置选项,避免每个事务的额外 fsync 的性能开销。从 MySQL 5.7.10 开始,
innodb_support_xa
不允许禁用,因为它会使复制不安全并阻止与二进制日志组提交相关的性能提升。MySQL 8.0 中删除了innodb_support_xa
配置选项。
是
- 年轻的
缓冲池中页面的 一个特性意味着它最近被访问过,因此在缓冲池数据结构中移动,这样它就不会被LRU算法过早地 刷新。该术语用于与缓冲池相关的表的某些INFORMATION_SCHEMA 列名中。
InnoDB
另见缓冲池、刷新、INFORMATION_SCHEMA、LRU、页面。