MySQL 8.0中新增的功能(六)

这篇具有很好参考价值的文章主要介绍了MySQL 8.0中新增的功能(六)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

配置

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查询,以及以相同形式物化的查询,以前依赖于旧的执行器。文章来源地址https://www.toymoban.com/news/detail-782573.html

到了这里,关于MySQL 8.0中新增的功能(六)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL 8.0中移除的功能(一)

    以下项目已经过时并在MySQL 8.0中被删除。如果有替代方案,请务必更新应用程序以使用这些替代方案。 对于在MySQL 8.0中被删除的功能,如果从MySQL 5.7源复制到MySQL 8.0副本时,可能会导致语句失败,或者在源和副本上产生不同的效果。为了避免这样的问题,使用在MySQL 8.0中被删

    2024年02月01日
    浏览(37)
  • ES6中新增的Set/Map两种数据结构

    Set是一种叫做集合的数据结构,Map是一种叫做字典的数据结构🧀🧀🧀 什么是集合?什么又是字典? 集合 是由一堆无序的、相关联的、且不重复的内存结构【数学中称之为元素】组成的组合 字典 是一些元素的集合。每个元素有一个称作key的域,不同元素的key各不相同 区别

    2024年02月07日
    浏览(39)
  • php开发实战分析(1):mysql操作字段(添加、删除、修改,多数据表中新增多个字段)

    要删除MySQL数据库中的字段,您需要执行以下步骤: 连接到MySQL数据库。您可以使用MySQL的PHP扩展或PDO(PHP数据对象)来实现连接。 使用MySQL扩展连接示例: 使用PDO连接示例: 构造SQL语句删除字段。使用 ALTER TABLE 语句来删除字段。在语句中使用 DROP COLUMN 指定要删除的

    2024年02月16日
    浏览(45)
  • mysql 8.0 双密码

    当需要定期修改密码,又不想影响现有连接的情况下,怎么才能做到无缝切换呢 从 MySQL 8.0.14 开始,用户帐户允许拥有双重密码,指定为主密码和辅助密码。双密码功能使得在以下场景中无缝执行凭证更改成为可能: 一个系统有大量MySQL服务器,可能涉及到复制。 多个应用程

    2024年01月19日
    浏览(56)
  • MySQL 8.0 密码策略修改

    2024年02月15日
    浏览(41)
  • mysql 8.0版本更换用户密码

    1、首先 cmd 进入命令行  2、查询版本号 3、看一下数据库 4、使用mysql即可 5、进行查询 user、host 6、修改root的密码 7、刷新权限

    2024年02月11日
    浏览(46)
  • macOS mysql 8.0 忘记密码

    root\\\'@\\\'localhost\\\' 指定了要修改的用户为 root 用户,并且限定了该用户只能从本地主机登录。 IDENTIFIED WITH caching_sha2_password 是指定了验证插件为 caching_sha2_password,一种密码验证插件 macos上 mysql 8.0 重置密码记录

    2024年02月15日
    浏览(35)
  • MySQL 8.0 修改 Root 密码

    MySQL 是一种常见的关系型数据库,在数据库管理中 MySQL 8.0 版本也是比较常用的版本,但是 MySQL 在初次安装之后默认设置了 root 用户的密码,对于一些情况下需要修改 root 用户密码的操作,需要使用特定的命令和工具。 一、MySQL 修改 Root 密码 MySQL 8.0 版本在安装完成之后,

    2024年01月21日
    浏览(46)
  • 【MySQL 8.0】标准配置文件详解(上)

    将按照不同的模块介绍配置项: 文末附上参考配置文件 socket MySQL 在本地可以通过 socket 方式连接,如果 my.cnf 配置文件中的 [client] 部分没有指定 socket 文件路径, mysql 默认会去寻找 /tmp/mysql.sock 为了安全考虑,通常会设置特定的 socket 路径 port 默认情况下,MySQL使用3306作为默

    2024年02月03日
    浏览(55)
  • MySql 8.0 配置外网访问

    1.登进MySQL之后 2,输入以下语句,进入mysql库: 3,更新域属性,\\\'%\\\'表示允许外部访问: 4,执行以上语句之后再执行: 5,再执行授权语句: 然后外部就可以通过账户密码访问了。 6,其它说明: 命令本质上的作用是: 将当前user和privilige表中的用户信息/权限设置从mysql库(

    2024年02月16日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包