MySQL 8.0中新增的功能(六)

2024-01-09

配置

MySQL中主机名的最大允许长度已经从之前的60个字符提高到255个ASCII字符。这适用于数据字典中与主机名相关的列、mysql系统模式、性能模式、INFORMATION_SCHEMA和sys模式;CHANGE MASTER TO语句的MASTER_HOST值;SHOW PROCESSLIST语句输出中的Host列;帐户名称中的主机名(例如在帐户管理语句和DEFINER属性中使用的主机名);以及与主机名相关的命令选项和系统变量。

注意事项:
- 允许的主机名长度增加可能会影响对主机名列创建索引的表。例如,现在对主机名进行索引的mysql系统模式中的表必须显式指定ROW_FORMAT属性为DYNAMIC,以容纳更长的索引值。
- 一些基于文件名的配置设置可能是根据服务器主机名构建的。允许的值受基础操作系统的限制,该操作系统可能不允许文件名包含255个字符的主机名长度。这会影响general_log_file、log_error、pid_file、relay_log和slow_query_log_file等系统变量和相应的选项。如果基于主机名的值对于操作系统来说太长,则必须提供显式较短的值。
- 尽管服务器现在支持255个字符的主机名,但使用--ssl-mode=VERIFY_IDENTITY选项建立与服务器的连接受OpenSSL支持的最大主机名长度的限制。主机名匹配涉及SSL证书的两个字段,其最大长度如下:通用名称:最大长度为64;主题备用名称:根据RFC#1034规定的最大长度。

插件

之前,MySQL插件可以用C或C++编写。现在,MySQL插件所使用的头文件包含了C++代码,这意味着插件必须用C++而不是C来编写。

C API

The MySQL C API现在支持用于与MySQL服务器进行非阻塞通信的异步函数。每个函数都是现有同步函数的异步对应函数。如果读取或写入到服务器连接必须等待,同步函数会阻塞线程。而异步函数可以让应用程序检查服务器连接上的工作是否准备好继续进行。如果还没有准备好,应用程序可以在稍后再次检查之前执行其他工作。

在类型转换中的附加目标类型

在MySQL 8.0.17版本中,函数CAST()和CONVERT()现在支持将值转换为DOUBLE、FLOAT和REAL类型。

JSON模式验证

MySQL 8.0.17引入了两个函数JSON_SCHEMA_VALID()和JSON_SCHEMA_VALIDATION_REPORT(),用于根据JSON模式验证JSON文档。

JSON_SCHEMA_VALID()函数用于验证JSON文档是否符合指定的模式,并返回TRUE(1)表示验证通过,返回FALSE(0)表示验证失败。

JSON_SCHEMA_VALIDATION_REPORT()函数返回一个包含有关验证结果的详细信息的JSON文档。

这两个函数具有以下特点:

  • 模式必须符合JSON Schema规范的草案4。
  • 支持required属性。
  • 不支持外部资源和$ref关键字。
  • 支持正则表达式模式,无效的模式会被静默忽略。
多值索引

从MySQL 8.0.17开始,InnoDB支持创建多值索引。多值索引是在存储数组值的JSON列上定义的二级索引,对于单个数据记录可以有多个索引记录。这样的索引使用了类似于 ​CAST(data->'$.zipcode' AS UNSIGNED ARRAY) ​的键部分定义。当查询适用于多值索引时,MySQL优化器会自动使用该索引,并且可以在EXPLAIN的输出中查看。

作为这项工作的一部分,MySQL添加了一个新函数JSON_OVERLAPS()和一个新的MEMBER OF()操作符,用于处理JSON文档,并扩展了CAST()函数,增加了一个新的ARRAY关键字,具体描述如下:

  • JSON_OVERLAPS()比较两个JSON文档。如果它们包含任何共同的键值对或数组元素,则函数返回TRUE(1),否则返回FALSE(0)。如果两个值都是标量,函数执行简单的相等性测试。如果一个参数是JSON数组而另一个是标量,标量将被视为数组元素。因此,JSON_OVERLAPS()可以作为JSON_CONTAINS()的补充。
  • MEMBER OF()测试第一个操作数(标量或JSON文档)是否是作为第二个操作数传递的JSON数组的成员,如果是,则返回TRUE(1),否则返回FALSE(0)。不执行操作数的类型转换。
  • CAST(expression AS type ARRAY)允许通过将JSON文档中的JSON数组在json_path处转换为SQL数组来创建一个函数索引。类型说明符仅限于CAST()已支持的类型,BINARY除外(不支持)。CAST()和ARRAY关键字的此用法仅由InnoDB支持,并且仅用于创建多值索引。
可提示的time_zone

在MySQL 8.0.17中,可以使用SET_VAR语法来将time_zone会话变量设置为可提示(hintable)的。

重做日志归档

从MySQL 8.0.17开始,InnoDB引擎支持重做日志归档。在备份操作进行时,备份工具复制重做日志记录可能无法跟上重做日志的生成速度,导致部分重做日志记录被覆盖而丢失。

为了解决这个问题,重做日志归档功能被引入。这个功能会将重做日志记录按顺序写入到一个归档文件中。备份工具可以根据需要从归档文件复制重做日志记录,从而避免数据的潜在丢失。

克隆插件

As of MySQL 8.0.17, MySQL确实提供了一款克隆插件(clone plugin),允许在本地或远程MySQL服务器实例上进行InnoDB数据的克隆操作。本地克隆操作将克隆的数据存储在运行MySQL实例的同一台服务器上。而远程克隆操作则通过网络从提供数据的MySQL服务器实例传输克隆的数据到接收方服务器或节点。

克隆插件支持复制(replication)。除了克隆数据外,克隆操作还从提供数据的服务器中提取并传输复制坐标(replication coordinates),并应用于接收方服务器,从而使得克隆插件可以用于生成Group Replication成员和副本。使用克隆插件进行生成操作比复制大量事务要快得多且更加高效。同时,Group Replication成员还可以配置为使用克隆插件作为恢复的替代方法,从而使成员可以自动选择最高效的方式从种子成员中检索群组数据。

从MySQL 8.0.27开始,允许在进行克隆操作时,在提供数据的MySQL服务器实例上进行并发的DDL操作。之前,在克隆操作期间会持有备份锁,阻止在提供数据的服务器上进行并发的DDL操作。如果要恢复到在克隆操作期间阻止并发DDL操作的先前行为,请启用 ​clone_block_ddl ​变量。

从MySQL 8.0.29开始, ​clone_delay_after_data_drop ​变量允许在远程克隆操作开始时,在接收方MySQL服务器实例上删除现有数据之后指定延迟时间。该延迟旨在为接收方主机上的文件系统在从提供数据的MySQL服务器实例克隆数据之前释放足够的空间提供足够的时间。某些文件系统会异步地在后台进程中释放空间。对于这些文件系统,在删除现有数据后过早地克隆数据可能导致克隆操作失败,因为空间不足。最大延迟时间为3600秒(1小时)。默认设置为0(无延迟)。

哈希连接优化(Hash Join Optimization)

从MySQL 8.0.18开始,只要加入操作中每对表至少包含一个等值连接条件,并且没有索引适用于任何连接条件,则使用哈希连接。哈希连接不需要索引,尽管它可以与仅适用于单表谓词的索引一起使用。在大多数情况下,哈希连接比块嵌套循环算法更高效。可以通过以下方式对类似于下面显示的连接进行优化:

SELECT *
 FROM t1
 JOIN t2
 ON t1.c1=t2.c1;
SELECT *
 FROM t1
 JOIN t2
 ON (t1.c1 = t2.c1 AND t1.c2 < t2.c2)
 JOIN t3
 ON (t2.c1 = t3.c1)

哈希连接还可以用于笛卡尔积操作,即当没有指定连接条件时。您可以使用EXPLAIN FORMAT=TREE或EXPLAIN ANALYZE查看特定查询中是否使用了哈希连接优化。(在MySQL 8.0.20及更高版本中,您还可以使用EXPLAIN,省略FORMAT=TREE。)

哈希连接可用的内存量受到join_buffer_size值的限制。如果哈希连接所需的内存超过该值,则会在磁盘上执行;一个磁盘上的哈希连接可以使用的磁盘文件数量受到open_files_limit的限制。

截至MySQL 8.0.19,不再支持在MySQL 8.0.18中引入的hash_join优化器开关(虽然hash_join = on仍然出现在optimizer_switch的值中,但设置它不再产生任何效果)。HASH_JOIN和NO_HASH_JOIN优化器提示也不再被支持。这两个开关和提示现在都已被弃用,预计它们将在未来的MySQL版本中被移除。在MySQL 8.0.18及更高版本中,可以使用NO_BNL优化器开关禁用哈希连接。

从MySQL 8.0.20开始,MySQL服务器不再使用块嵌套循环,而是在以前可能使用块嵌套循环的任何情况下都使用哈希连接,即使查询中不包含等值连接条件。这适用于内部非等值连接、半连接(semijoins)、反连接(antijoins)、左外连接和右外连接。optimizer_switch系统变量的block_nested_loop标志以及BNL和NO_BNL优化器提示仍然受支持,但从现在开始只能控制哈希连接的使用。此外,内部和外部连接(包括半连接和反连接)现在都可以使用批量键访问(BKA),它逐步分配连接缓冲区内存,因此单个查询不需要使用大量实际上并不需要的资源进行解析。从MySQL 8.0.18开始,仅支持内部连接使用BKA。

在MySQL 8.0.20中,还使用迭代器执行器取代了以前版本的MySQL中使用的执行器。这项工作包括替换旧的索引子查询引擎,该引擎控制形式为WHERE value IN(SELECT column FROM table WHERE ...)的查询,对于那些没有被优化为半连接的IN查询,以及以相同形式物化的查询,以前依赖于旧的执行器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 8.0中新增的功能(六) 的相关文章

  • 使用外部硬盘写入和存储 mysql 数据库

    我已经设置了 mysql 数据库在我的 Mac 上使用 java 和 eclipse 运行 它运行得很好 但现在我将生成大约 43 亿行数据 这将占用大约 64GB 的数据 我存储了大量的密钥和加密值 我有一个 1TB 外部我想用作存储位置
  • 有没有办法从 MySQL 的列中提取与正则表达式匹配的文本?

    例如 如果特定列中的所有条目都具有 a z 0 9 形式 如何仅提取前导字母 以便 asdf123 和 as3456 分别返回 asdf 和 as 这对于 mysql 正则表达式功能来说是不可能的 除非安装一些似乎是为此设计的 udf 从技
  • MySQL REPLACE 在自动递增行中

    假设我有一个 MySQL 表 其中包含三列 id a and b和名为id is an AUTO INCREMENT场地 如果我将如下查询传递给 MySQL 它将正常工作 REPLACE INTO table id a b VALUES 1
  • 数据包无序。得到:80 预期:0 node.js

    这是我的 非常简单 代码 var connection mysql createConnection infosDB connection connect connection query SELECT FROM action functi
  • 无循环按键对多维数组求和

    我有这个 Array 0 gt Array f count gt 1 uid gt 105 1 gt Array f count gt 0 uid gt 106 2 gt Array f count gt 2 uid gt 107 3 gt
  • 是否可以从数据库转储生成 knex 种子文件?

    就我而言 我使用的是 mysql 但是 我正在寻找一种通用解决方案 用于从当前运行的数据库或数据库转储生成 knex 种子文件 我可以就像是 https github com tgriesser knex issues 944 issuec
  • 带参数的 MySQL 脚本

    我想创建一个部署脚本 以某种方式模拟 Oracle 部署脚本 其中使用 param 您可以使用之前声明的参数 我需要为不同数据库上的不同用户自动调用此脚本 例如我的脚本应该是 USE param DROP TABLE IF EXISTS T
  • 更新或插入 MySQL Python

    如果记录已存在 我需要更新一行 如果不存在 我需要创建一个新记录 我理解 ON DUPLICATE KEY 将使用 MYSQLdb 完成此操作 但是我无法使其正常工作 我的代码如下 cursor database cursor cursor
  • SQL:将现有列设置为 MySQL 中的主键

    我有一个包含 3 列的数据库 id name somethingelse 该表没有设置索引 我收到 未定义索引 在 phpmyadmin 中id 是一个 7 位字母数字值 每行都是唯一的 我想将 Drugid 设置为主键 索引 我不知道有没
  • 我可以让 MySQL 数据库在插入语句后自动为列分配值吗?

    给定一个具有 ID pk 和 name 列的员工表 ID name 1 John 2 James 3 Tom Can I do INSERT INTO employee name VALUES Jack 并以某种方式让数据库自动分配下一个可
  • MySQL:更新所有行将字段设置为0,但将一行的字段设置为1

    是否有一种有效的方法将行字段的选择更新为 0 但根据 ID 将其中一行设置为 1 基本上 我在数据库中有多个对象 我想在其中一个 inuse 之间切换 因此查询将其中一行 按 id 设置为 inuse 1 将其他行设置为 inuse 0 谢
  • 使用子查询与 LEFT JOIN 一起选择 MAX 值

    我有一个获取搜索结果的查询 效果很好 查询成功示例 SELECT individuals individual id individuals unique id TIMESTAMPDIFF YEAR individuals day of b
  • MySQL 连接不工作:2002 没有这样的文件或目录

    我正在尝试设置 WordPress 我已经运行了 Apache 和 MySQL 并且帐户和数据库都已设置 我尝试建立一个简单的连接 我总是得到这个 错误 2002 没有这样的文件或 目录 它正在谈论什么文件或目录 我使用的是 OS X Sn
  • 用于添加和删除客户名称的 Web 表单出现问题

    我正在尝试创建一个 Web 表单 其中列出了所有客户 然后为您提供一个文本字段 旁边有一个按钮 您可以在其中添加客户 然后它应该显示客户列表 旁边有删除按钮 您可以单击该按钮从数据库中删除客户 我正在让它发挥作用 对于初学者来说 它会回显
  • 计算表中的行数

    获取 MySQL 数据库中特定表的总行数的语法是什么 我一直都这么做 SELECT count FROM table 上面将为您提供所有行的总数 您可以轻松添加 WHERE 子句来获取某个子集的计数 SELECT count FROM ta
  • 如何使用Peewee查询多个相似的数据库?

    我遇到了使用 Peewee 查询多个数据库的问题 我有 2 个现有的 mysql 数据库 让我们将它们命名为 A 和 B 结构相似 因为它是两个 Bugzilla 数据库 我使用 Pwiz 生成模型 modelsA py 和 modelsB
  • MySQL ALTER TABLE 挂起

    我知道这个问题已经被问过好几次了 但我的问题发生在我刚刚创建的表上 它只有 10 列和 1 行 因此 与通常的挂起问题不同 这不是具有大量数据的大表的情况 但它仍然挂着 这是我正在运行的 SQL ALTER TABLE db Search
  • 使用mysql数据按高低价格排序

    这是我所拥有的以及我想做的 我的 MySql 数据库中有 12 个项目 4 个产品为 4 99 4 个产品为 3 99 4 个产品为 2 99 我意识到我可以像这样查询数据库 它会给我一个该价格的产品列表
  • TCPDF - 来自 mysql 的打印表显示重复的第一行

    我是 TCPDF 的新手 我面临的小问题是所有输出数据都显示同一行 我的意思是第一条记录重复数据库中存在的总数据 行 的次数 这是我的代码 tbl header
  • 未找到教义列:1054“字段列表”中未知列“s.features”

    我在站点表中添加了一个新列 features 并使用 Doctrine 重新生成了模型 此代码导致错误 siteTable Doctrine Core getTable Site site siteTable gt findOneByNam

随机推荐

  • InfluxDB学习笔记

    本博客是我在学习InfluxDB的时候 记录的笔记 大家可以看看参考学些 简介 简述 InfluxDB是一个由InfluxData开发的开源时序型数据 它由Go写成 着力于高性能查询与存储时序型数据 InfluxDB被广泛应用于存储系统的监
  • 高翔博士Faster-LIO论文和算法解析

    说明 题目 Faster LIO 快速激光IMU里程计 参考链接 Faster LIO 快速激光IMU里程计 iVox Faster Lio 智行者高博团队开源的增量式稀疏体素结构 Faster Lio是高翔博士在Fast系列的新作 对标基
  • 在JavaScript面向对象编程中使用继承

    面向对象编程是一种重要的编程范式 它通过将数据和操作封装在对象中 实现了代码的模块化和复用 在JavaScript中 我们可以使用继承来实现对象之间的关系 从而使代码更加灵活和可扩展 那么 让我们深入探讨在JavaScript中如何使用继承
  • 安达发APS|PDM产品数据管理可以帮助企业实现的价值

    在实际运用中 APS系统的PDM产品数据管理功能可以帮助企业实现以下价值 1 提高产品设计和制造的效率 通过对产品结构和文档的统一管理 可以实现对产品信息的快速查询和检索 提高产品设计和制造的效率 2 保证产品数据的准确性和一致性 通过对版
  • excel 按照姓名日期年份分组求和

    excel 需要按照 姓名 日期中年份分组求和 目前想到 sumifs函数 大概需求如下 表格数据大概如下 A B C 姓名 日期 金额 a 2022 2 1 542 a 2023 4 5 154 b
  • 基于多目标粒子群算法的三个目标的支配解求解,基于多目标粒子群的帕累托前沿求解,基于多目标粒子群的三目标求解

    目录 摘要 测试函数shubert 粒子群算法的原理 粒子群算法的主要参数 粒子群算法原理 基于多目标粒子群算法的支配解求解 基于多目标粒子群的帕累托前沿求解 基于多目标粒子群的三目标求解 代码 结果分析 展望 代码下载 基于多目标粒子群算
  • 线上企业展厅:企业发展新利器,轻松实现线上企业展示

    引言 在当今数字化时代 线上企业展厅已经成为企业展示品牌形象 推广产品的重要手段 它不仅可以帮助企业拓宽市场 提升品牌知名度 还能为企业带来更多的商业机会 那么线上企业展厅有什么优势 如何搭建成功的线上企业展厅 一 线上企业展厅的优势 1
  • 题解 | #链表中的节点每k个一组翻转#C++暴力遍历解法

    求大家投下我们腾讯吧 发的一堆sp被鸽了 大数据面试题 Hive 华为14A还是保研华中科技大学 求大家投下我们腾讯吧 发的一堆sp被鸽了 终极 2024校招八股文 MySQL索引 第一篇 招芯片验证实习生 碰到渣导悲哀3年 给秋招画个句号
  • Sage运行pwntools库脚本异常解决:OSError: Int or String expected

    需要和Oracle交互的密码学脚本一般都需要借助pwn库的帮助 今天切换了python版本后 出现了一个异常 OSError Int or String expected 详细异常见文章 查阅一下源码后简单的解决了这个问题 在此分享一下 文
  • 解锁数据之门Roxlabs全球住宅IP赋能海外爬虫与学术研究

    11 20云账房测试一面凉经 华为开奖啦 关于邮储的一些情况 维信金科一面 二面 hr面 我的导师太好了 上海维信金科 技术面试一 Java后端开发岗记录贴 维信金科正式批面经 软件技术领域就业大纲 1 公司分类 你裁掉这个应届生用了多长时
  • TypeScript 和 jsdom 库创建爬虫程序示例

    TypeScript 简介 TypeScript 是一种由微软开发的自由和开源的编程语言 它是 JavaScript 的一个超集 可以编译生成纯 JavaScript 代码 TypeScript 增加了可选的静态类型和针对对象的编程功能 使
  • 在职状态下继续学习的心得体会

    本来平时记录的都是一些技术点的学习和使用 今天打算记录一下学习方法 当然不一定适合所有人 因人而异 仅供参考 学习这件事 对于IT行业来说 真的是活到老学到老 技术的更新迭代速度非常快 而且总是有那么一些公司特别的卷 没办法 改变不了外因
  • 模型训练 -- 数据集的获取(如何筛选想要数据)

    目录 一 前言 二 数据平台 三 数据处理 1 MaixHub平台使用 2 ZIP格式整理与上传平台 3 数据处理 使用平台删除标注 四 参考 一 前言 对于图像数据集的获取 一直是一个麻烦点 自己不想去标注数据 太繁琐了 所以 我分享出一
  • 在线智能抠图软件有哪些?证件照背景颜色更换不求人

    2024年上半年全国计算机等级考试 NCRE 报名开始啦 不出意外 这次报名仍然是需要提交证件照 具体要求如下 本人近期正面免冠 白色背景 彩色证件照 不得使用生活照 美颜照 最小像素高宽为192x144 最小成像区高宽为48mmx33mm
  • 大模型笔记【2】 LLM in Flash

    Apple最近发表了一篇文章 可以在iphone MAC 上运行大模型 LLM in a flash Efficient Large Language Model Inference with Limited Memory 主要解决的问题是
  • ros2 基础学习 15- URDF:机器人建模方法

    URDF 机器人建模方法 ROS是机器人操作系统 当然要给机器人使用啦 不过在使用之前 还得让ROS认识下我们使用的机器人 如何把一个机器人介绍给ROS呢 为此 ROS专门提供了一种机器人建模方法 URDF Unified Robot De
  • 解锁数据之门Roxlabs全球住宅IP赋能海外爬虫与学术研究

    11 20云账房测试一面凉经 华为开奖啦 关于邮储的一些情况 维信金科一面 二面 hr面 我的导师太好了 上海维信金科 技术面试一 Java后端开发岗记录贴 维信金科正式批面经 软件技术领域就业大纲 1 公司分类 你裁掉这个应届生用了多长时
  • MySQL 8.0中新增的功能(五)

    改进哈希连接性能 MySQL 8 0 23重新实现了用于哈希连接的哈希表 从而改进了哈希连接的性能 这项工作包括修复了一个问题 Bug 31516149 Bug 99933 在这个问题中 用于连接缓冲区 join buffer size 的
  • 【设计模式之美】 SOLID 原则之五:依赖反转原则:将代码执行流程交给框架

    文章目录 一 控制反转 IOC 二 依赖注入 DI 三 依赖注入框架 DI Framework 四 依赖反转原则 DIP 一 控制反转 IOC 通过一个例子来看一下 什么是控制反转 public class UserServiceTest
  • MySQL 8.0中新增的功能(六)

    配置 MySQL中主机名的最大允许长度已经从之前的60个字符提高到255个ASCII字符 这适用于数据字典中与主机名相关的列 mysql系统模式 性能模式 INFORMATION SCHEMA和sys模式 CHANGE MASTER TO语