MySQL 8.0中新增的功能(八)

用户评论和用户属性

MySQL 8.0.21引入了在创建或更新用户账户时设置用户评论和用户属性的功能。用户评论由作为COMMENT子句参数传递的任意文本组成,通过CREATE USER或ALTER USER语句使用。用户属性由以JSON对象形式传递的数据组成,作为ATTRIBUTE子句参数传递给这两个语句之一。属性可以包含JSON对象表示法中的任何有效的键值对。在单个CREATE USER或ALTER USER语句中只能使用COMMENT或ATTRIBUTE中的一个。

用户评论和用户属性在内部作为一个JSON对象存储在一起,其中评论文本作为键为"comment"的元素的值。这些信息可以从Information Schema USER_ATTRIBUTES表的ATTRIBUTE列中检索;由于它以JSON格式存储,您可以使用MySQL的JSON函数和运算符来解析其内容。对用户属性的连续更改将与当前值合并,就像使用JSON_MERGE_PATCH()函数一样。

例如:

mysql> CREATE USER 'mary'@'localhost' COMMENT 'This is Mary Smith\'s account';
Query OK, 0 rows affected (0.33 sec)
mysql> ALTER USER 'mary'@'localhost'-≫ ATTRIBUTE '{"fname":"Mary", "lname":"Smith"}';
Query OK, 0 rows affected (0.14 sec)
mysql> ALTER USER 'mary'@'localhost'-≫ ATTRIBUTE '{"email":"mary.smith@example.com"}';
Query OK, 0 rows affected (0.12 sec)
mysql> SELECT-> USER,-> HOST,-> ATTRIBUTE->>"$.fname" AS 'First Name',-> ATTRIBUTE->>"$.lname" AS 'Last Name',-> ATTRIBUTE->>"$.email" AS 'Email',-> ATTRIBUTE->>"$.comment" AS 'Comment'-> FROM INFORMATION_SCHEMA.USER_ATTRIBUTES-> WHERE USER='mary' AND HOST='localhost'\G
*************************** 1. row ***************************USER: maryHOST: localhost
First Name: MaryLast Name: SmithEmail: mary.smith@example.comComment: This is Mary Smith's account
1 row in set (0.00 sec)
新的optimizer_switch标志

MySQL 8.0.21在optimizer_switch系统变量中添加了两个新的标志,如下所述:

• prefer_ordering_index标志
默认情况下,当优化器确定使用有序索引可以更快执行带有LIMIT子句的ORDER BY或GROUP BY查询时,MySQL会尝试使用有序索引。然而,在某些情况下,选择不同的优化方式可能会实际表现更好。现在可以通过将prefer_ordering_index标志设置为off来禁用此优化。
该标志的默认值为on。

• subquery_to_derived标志
当将该标志设置为on时,优化器会将符合条件的标量子查询转换为对派生表的连接。例如,查询SELECT * FROM t1 WHERE t1.a > (SELECT COUNT(a) FROM t2)将被重写为SELECT t1.a FROM t1 JOIN ( SELECT COUNT(t2.a) AS c FROM t2 ) AS d WHERE t1.a > d.c。
此优化适用于SELECT、WHERE、JOIN或HAVING子句中的子查询,其中包含一个或多个聚合函数但没有GROUP BY子句,且不是相关的,并且不使用任何非确定性函数。
该优化也适用于作为IN、NOT IN、EXISTS或NOT EXISTS参数的表子查询,且不包含GROUP BY子句。例如,查询SELECT * FROM t1 WHERE t1.b < 0 OR t1.a IN (SELECT t2.a + 1 FROM t2)将被重写为SELECT a, b FROM t1 LEFT JOIN (SELECT DISTINCT 1 AS e1, t2.a AS e2 FROM t2) d ON t1.a + 1 = d.e2 WHERE t1.b < 0 OR d.e1 IS NOT NULL。
从MySQL 8.0.24开始,该优化还可以应用于相关标量子查询,通过对其应用额外的分组,然后在提升的谓词上进行外连接。例如,查询SELECT * FROM t1 WHERE (SELECT a FROM t2 WHERE t2.a=t1.a) > 0可以重写为SELECT t1.* FROM t1 LEFT OUTER JOIN (SELECT a, COUNT(*) AS ct FROM t2 GROUP BY a) AS derived ON t1.a = derived.a WHERE derived.a > 0。MySQL执行基数检查以确保子查询不返回多行(ER_SUBQUERY_NO_1_ROW)。

通常情况下,该优化被禁用,因为在大多数情况下它并不会带来明显的性能优势。该标志默认为off。

XML增强功能

从MySQL 8.0.21开始,LOAD XML语句现在支持导入XML中的CDATA节。

现在支持将数据转换为YEAR类型

从MySQL 8.0.22开始,服务器允许将数据转换为YEAR类型。CAST()和CONVERT()函数都支持单个数字、两位数字和四位数字的YEAR值。对于一位数字和两位数字的值,允许的范围是0-99。四位数字的值必须在1901-2155的范围内。YEAR还可以作为JSON_VALUE()函数的返回类型使用;该函数只支持四位数的年份。

字符串、日期时间和浮点数值都可以转换为YEAR类型。不支持将GEOMETRY值转换为YEAR类型。

将TIMESTAMP值作为UTC检索

从MySQL 8.0.22开始,支持将系统时区的TIMESTAMP列值在检索时转换为UTC DATETIME。使用CAST(value AT TIME ZONE specifier AS DATETIME)语法,其中specifier是[INTERVAL] '+00:00'或'UTC'之一。如果需要,可以通过指定精度高达6位小数的DATETIME值返回的参数来确定精度。在这种构造中,不支持ARRAY关键字。 还支持使用时区偏移插入到表中的TIMESTAMP值。不支持在CONVERT()或任何其他MySQL函数或构造中使用AT TIME ZONE。

Dump文件输出同步化

从MySQL 8.0.22开始,通过SELECT INTO DUMPFILE和SELECT INTO OUTFILE语句在写入文件时支持定期同步化。可以通过将select_into_disk_sync系统变量设置为ON来启用此功能;写入缓冲区的大小由select_into_buffer_size设置的值确定,默认为131072(217)字节。
此外,可以使用select_into_disk_sync_delay来设置同步到磁盘后的可选延迟时间,默认为无延迟(0毫秒)。

单次准备语句

从MySQL 8.0.22开始,准备语句只需准备一次,而不是在每次执行时都要准备。这是在执行PREPARE时完成的。对于存储过程内部的任何语句也是如此;当首次执行存储过程时,语句将被准备一次。

这个改变的一个结果是,准备语句中使用的动态参数的解析方式也按照以下方式进行了更改:

  • 准备语句的参数在准备语句时被分配一个数据类型;该类型会保留在每次后续执行该语句时(除非重新准备该语句,见下文)。
  • 对于在准备语句后续执行中使用的给定参数或用户变量,如果使用了不同的数据类型,可能会导致语句被重新准备;因此,建议在重新执行准备语句时使用相同的数据类型。
  • 不再接受使用窗口函数的以下结构,以与SQL标准保持一致:
    • NTILE(NULL)
    • NTH_VALUE(expr, NULL)
    • LEAD(expr, nn) 和 LAG(expr, nn),其中nn是负数 这有助于更好地符合SQL标准。请参阅各个函数的描述以获取更多详细信息。
  • 在准备语句中引用的用户变量现在在准备语句时具有确定的数据类型,该类型会保留在每次后续执行该语句时。
  • 在存储过程中出现的语句中引用的用户变量现在在第一次执行该语句时确定其数据类型,并且该类型会保留在任何后续调用该存储过程时。
  • 当执行形如SELECT expr1, expr2, ... FROM table ORDER BY ? 的准备语句时,为参数传递一个整数值N不再导致结果按照选择列表中的第N条表达式排序;结果不再排序,而与使用ORDER BY常量时的预期一致。
  • 仅在作为准备语句或存储过程中出现的语句中进行一次准备可以提高性能,因为它消除了重复准备的额外成本。这样做还可以避免可能的多个准备结构回滚,这是MySQL中许多问题的根源。
RIGHT JOIN作为LEFT JOIN的处理方式 

从MySQL 8.0.22开始,服务器在内部将所有RIGHT JOIN实例作为LEFT JOIN处理,消除了在解析时没有完全转换的特殊情况。

派生条件下推优化 

MySQL 8.0.22(以及更高版本)实现了针对具有物化派生表的查询的派生条件下推优化。对于诸如SELECT * FROM (SELECT i, j FROM t1) AS dt WHERE i > constant的查询,现在可以在许多情况下将外部WHERE条件下推至派生表,从而得到SELECT * FROM (SELECT i, j FROM t1 WHERE i > constant) AS dt的结果。

在以前,如果派生表被物化但没有合并,MySQL会将整个表进行物化,然后使用WHERE条件对行进行筛选。通过使用派生条件下推优化将WHERE条件移到子查询中,通常可以减少需要处理的行数,从而减少执行查询所需的时间。

当派生表不使用任何聚合或窗口函数时,外部WHERE条件可以直接下推到物化的派生表。当派生表使用GROUP BY但不使用任何窗口函数时,外部WHERE条件可以作为HAVING条件下推到派生表中。当派生表使用窗口函数且外部WHERE条件引用了窗口函数的PARTITION子句中使用的列时,WHERE条件也可以下推到派生表中。

派生条件下推默认情况下是启用的,可以通过optimizer_switch系统变量中的derived_condition_pushdown标志进行确认。这个标志在MySQL 8.0.22中添加,它默认设置为开启。要禁用特定查询的优化,可以使用NO_DERIVED_CONDITION_PUSHDOWN优化器提示(也是在MySQL 8.0.22中添加的)。如果由于设置derived_condition_pushdown为off而禁用了优化,可以使用DERIVED_CONDITION_PUSHDOWN来为特定查询启用优化。

派生条件下推优化不能应用于包含LIMIT子句的派生表。在MySQL 8.0.29之前,当查询包含UNION时也无法使用该优化。从MySQL 8.0.29开始,条件在大多数情况下可以下推到联合查询的两个查询块中。

此外,一个使用子查询的条件无法进行下推,而一个包含在外连接中的派生表作为内部表时,其WHERE条件也无法进行下推。

MySQL授权表上的非锁定(Non-locking)读取 

从MySQL 8.0.22开始,为了允许对MySQL授权表进行并发的DML和DDL操作,之前在MySQL授权表上获取行锁的读操作被执行为非锁定读取。

现在在MySQL授权表上执行的非锁定读取操作包括:
• 通过连接列表和子查询从授权表读取数据的SELECT语句和其他只读语句,包括使用任何事务隔离级别的SELECT ... FOR SHARE语句。
• 使用任何事务隔离级别从授权表中读取数据(通过连接列表或子查询),但不修改它们的DML操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/609776.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

​如何在iOS手机上查看应用日志

引言 在开发iOS应用过程中&#xff0c;查看应用日志是非常重要的一项工作。通过查看日志&#xff0c;我们可以了解应用程序运行时的状态和错误信息&#xff0c;帮助我们进行调试和排查问题。本文将介绍两种方法来查看iOS手机上的应用日志&#xff0c;并提供相应的操作步骤。 …

基于Github官方教程的快速入门学习

GitHub 是一个用于版本控制和协作的代码托管平台。 它允许您和其他人随时随地协同处理项目。 创建仓库 在任何页面的右上角&#xff0c;使用 下拉菜单选择“新建存储库”。 之后会进入创建仓库的界面&#xff0c;需要我们进行如下操作&#xff1a; 写仓库的名字写对于本仓库…

无失真编码之算术编码的python实现——数字图像处理

原理 无失真编码中的算术编码是一种用于将输入数据进行高效压缩的方法&#xff0c;同时保留了原始数据的完整性。 算术编码的实现过程如下&#xff1a; 数据分段&#xff1a;首先&#xff0c;将要进行编码的数据划分为一个个符号或字符。每个符号可以是文本中的一个字母、一幅…

ubuntu 20.04下 Tesla P100加速卡使用

1.系统环境&#xff1a;系统ubuntu 20.04, python 3.8 2.查看cuDNN/CUDA与tensorflow的版本关系如下&#xff1a; Build from source | TensorFlow 从上图可以看出&#xff0c;python3.8 对应的tensorflow/cuDNN/CUDA版本。 3.安装tensorflow #pip3 install tensorflow 新版…

hadoop自动获取时间

1、自动获取前15分钟 substr(from_unixtime(unix_timestamp(concat(substr(20240107100000,1,4),-,substr(20240107100000,5,2),-,substr(20240107100000,7,2), ,substr(20240107100000,9,2),:,substr(20240107100000,11,2),:,00))-15*60,yyyyMMddHHmmss),1) unix_timestam…

Ceph源码分析-s->req_id = store->svc()->zone_utils->unique_id(req->id)

s->req_id store->svc()->zone_utils->unique_id(req->id); 涉及到指针和对象方法的调用。我会逐步为你解释这行代码的含义。 s->req_id ...; s 是一个指针&#xff0c;它指向一个结构或类。req_id 是该结构或类的一个成员变量。这行代码的意思是&#xff…

《管理的实践》商业/企业的目的和功能

笔记 From《管理的实践》彼得德鲁克 企业的目的 企业的目的&#xff0c;只有一个正确而有效的定义&#xff1a;“创造顾客”。 市场不是由上帝、大自然或经济力量创造的&#xff0c;而是由企业家创造的。 企业的功能 由于企业的目的是创造顾客&#xff0c;任何企业都有两个基…

与AI合作 -- 单例工厂2遗留的问题:bard的错误

问题 上一节我们针对函数内静态变量初始化在多线程环境中要不要用锁保护提出了疑问&#xff0c;代码如下&#xff1a; class Singleton { public:static Singleton& getInstance() {std::lock_guard<std::mutex> lock(mutex); // Acquire lock for thread safetysta…

LeetCode[102] 二叉树层序遍历

Description&#xff1a;给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。解法&#xff1a; vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>…

第一次面试总结 - 迈瑞医疗 - 软件测试

&#x1f9f8;欢迎来到dream_ready的博客&#xff0c;&#x1f4dc;相信您对专栏 “本人真实面经” 很感兴趣o (ˉ▽ˉ&#xff1b;) 专栏 —— 本人真实面经&#xff0c;更多真实面试经验&#xff0c;中大厂面试总结等您挖掘 注&#xff1a;此次面经全靠小嘴八八&#xff0c;没…

大数据版本管理工具数据湖文件存储系统LakeFS客户端的安装和配置使用

LakeFS是一个开源的数据湖文件存储系统&#xff0c;它提供了版本控制和数据管理的功能。本文将介绍如何安装和配置LakeFS客户端。 首先&#xff0c;你需要确保已经安装了Python环境。LakeFS的客户端使用Python编写&#xff0c;因此需要安装Python来运行客户端。 安装LakeFS客…

腾讯云最新优惠活动入口整理汇总

随着云计算技术的快速发展&#xff0c;腾讯云作为国内领先的云服务提供商&#xff0c;一直致力于为用户提供高效、稳定、安全的云服务。为了回馈广大用户的支持&#xff0c;腾讯云经常推出各种优惠活动。本文将对腾讯云最新的优惠活动入口进行整理和汇总&#xff0c;帮助用户更…

《系统架构设计师教程(第2版)》第3章-信息系统基础知识-08-典型信息系统架构模型(电子政务、电子商务)

文章目录 1. 企业信息化与电子政务1.1 电子政务的概念1.2 三个组成部分1.3 电子政务的内容(重点)1)政府与政府2)政府对企/事业单位3)政府对居民4)企业对政府5)居民对政府1.4 电子政务的发展阶段。1)起步阶段2)政府与用户单向互动3)政府与用户双向互动4)网上事务处理…

【CV】计算两个向量的夹角,并使用 OpenCV 可视化弧线

背景 基于人体/动物&#xff0c;骨骼点数据&#xff0c;计算关节角度 1. 原理 计算两个向量的夹角&#xff0c;我们已三个点为例&#xff0c;BA 向量和BC向量&#xff0c;求 B 的角度。若为四个点&#xff0c;延长交叉即可。 2. 效果 效果图如下 3. 核心代码 def comput…

【服务器数据恢复】FreeNAS+ESXi数据恢复案例

服务器数据恢复环境&#xff1a; 一台服务器&#xff0c;虚拟化系统为esxi&#xff0c;上层使用iSCSI的方式实现FC SAN功能&#xff0c;iSCSI通过FreeNAS构建。 FreeNAS采用了UFS2文件系统&#xff0c;esxi虚拟化系统里有3台虚拟机&#xff1a;其中一台虚拟机安装FreeBSD系统&a…

[足式机器人]Part3 机构运动学与动力学分析与建模 Ch00-2(2) 质量刚体的在坐标系下运动

本文仅供学习使用&#xff0c;总结很多本现有讲述运动学或动力学书籍后的总结&#xff0c;从矢量的角度进行分析&#xff0c;方法比较传统&#xff0c;但更易理解&#xff0c;并且现有的看似抽象方法&#xff0c;两者本质上并无不同。 2024年底本人学位论文发表后方可摘抄 若有…

开发基础----牛客SQL速成

SQL练习题解 一.单表查询(非技术快速入门)1.基础查询SQL1 查询所有列SQL2 查询多列SQL3 查询结果去重SQL4 查询结果限制返回行数SQL5 将查询后的列重新命名SQL6 查找学校是北大的学生信息SQL7 查找年龄大于24岁的用户信息SQL8 查找某个年龄段的用户信息SQL9 查找除复旦大学的用…

redis的高可用(主从复制、哨兵、群集)

redis的高可用&#xff08;主从复制、哨兵、群集&#xff09; 主从复制&#xff1a;主从复制是高可用Redis的基础&#xff0c;哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份&#xff0c;以及对于读操作的负载均衡和简单的故障恢复。缺陷&…

使用 LLVM clang C/C++ 编译器编译 OpenSSL 3.X库

1、下载 OpenSSL 3.X 库的源代码放到待编译目录 2、解压并接入 OpenSSL 3.X 库源码的根目录 3、复制 ./Configure 一个取名为 ./Configure-clang 4、修改 ./Configure-clang 找到配置段&#xff1a; CC CXX CPP LD 把它们改成 CC > "/usr/bin/clang-…

JavaScript 地址信息与页面跳转

在JavaScript中&#xff0c;你可以使用各种方法来处理地址信息并进行页面跳转。以下是一些常见的方法&#xff1a; 1.使用window.location对象&#xff1a; window.location对象包含了当前窗口的URL信息&#xff0c;并且可以用来进行页面跳转。 * 获取URL的某一部分&#xf…