MySQL 8.0 新特性


原文地址: Announcing General Availability of MySQL 8.0
我在网发布的免费视频讲解 MySQL 8.0 版本新特性

2018 年 4 月 19 日,Oracle 发布了最新的 MySQL 8.0 GA 版本,该版本增加了对 NoSQL 的支持以及许多新的特性:

  1. NoSQL 新的文档存储功能使得开发者可以灵活地开发基于传统关系型数据库的应用,以及基于 NoSQL 的模式自由(schema-free)的文档数据库应用。因而不再需要单独的 NoSQL 文档数据库。
  2. SQL 包括窗口函数(Window functions)、通用表表达式(Common Table Expressions)、SQL锁定子句 NOWAIT 和 SKIP LOCKED 选项、降序索引、GROUPING函数、正则表达式(Regular Expressions)、默认字符集(UTF8MB4)、优化器代价模型以及统计直方图。
  3. JSON 扩展语法、新函数、改进排序、部分更新。通过使用 JSON 表函数,可以为 JSON 数据增加 SQL 处理能力。
  4. GIS 支持地理信息处理。空间参考系统(SRS),包括能够支持空间数据类型、空间索引和空间函数的SRS。
  5. 可靠性 DDL 语句的原子性和故障安全性,元数据存储在一个单独的事务性数据字典中。
  6. 可观测性 增强了性能模式、信息模式、不可见索引以及错误日志。
  7. 可管理性 永久性配置参数、Undo 表空间管理、重新启动命令以及新的 DDL 命令。
  8. 高可用性 InnoDB 集群提供了一个集成的原生数据库HA解决方案。
  9. 安全性 OpenSSL 改进、新的默认认证方式、SQL 角色管理、super 权限拆分、密码强度以及授权增强。
  10. 性能 MySQL 8.0 比 MySQL 5.7 性能快 2 倍。

开发特性

MySQL 8.0 为开发者提供了许多新的特性,包括 SQL、JSON 以及 GIS 等方面的扩展。同时,UTF8MB4 成为了 8.0 的默认字符集,可以支持存储各种表情符号。

NoSQL 文档存储

MySQL 文档存储
为开发者提供了最大的灵活性,即支持传统的 SQL 关系型应用,也支持 NoSQL 模式自由的文档数据库应用。因此,不再需要配置单独的 NoSQL 文档数据库。MySQL 文档存储为无模式的 JSON 文档提供了多文档事务支持和完全 ACID 兼容。

documentstore

SQL

窗口函数

MySQL 8.0 支持窗口函数(window function)。与分组聚合函数类似,窗口函数也是基于一组数据行进行某种计算,例如 COUNT 或者 SUM。不同之处在于分组聚合将一组值合并成一个单行结果,而窗口函数针对每一行数据聚合出一个结果。

窗口函数可以分为两类:基于 SQL 聚合函数的窗口函数,以及专用的窗口函数。在 MySQL 中,前者包括:COUNT、SUM、AVG、MIN、MAX、BIT_OR、BIT_AND、BIT_XOR、STDDEV_POP(以及同义词 STD、STDDEV)、STDDEV_SAMP、VAR_POP(以及同义词 VARIANCE)和 VAR_SAMP 。MySQL 中专门的窗口函数包括:RANK、DENSE_RANK、PERCENT_RANK、CUME_DIST、NTILE、ROW_NUMBER、FIRST_VALUE、LAST_VALUE、NTH_VALUE、LEAD 以及 LAG。

通用表表达式

MySQL 8.0 提供了通用表表达式
(Common Table Expressions,CTE),包括递归通用表表达式。非递归 CTE 可以看作“改进的派生表”,因为它允许多次引用相同的派生表。递归 CTE 是一组通过递归方式构建的数据行:从一个初始的行集开始,通过处理产生新的行,增加到之前的行集,然后将新的行集再次进行处理,生成更多的行,继续整个过程,直到不会产生更多的新行。

cte

NOWAIT and SKIP LOCKED

MySQL 8.0 为 SQL 锁定子句提供了额外的选项 NOWAIT 和 SKIP LOCKED。通常,如果某一行数据由于执行了一个 UPDATE 或者 SELECT … FOR UPDATE 语句而被锁定,其他事务如果想要访问该行,都需要等待锁的释放。在某些情况下,事务需要立即返回或者忽略被锁定的行。使用 NOWAIT 的锁定子句不会等待获取一个行锁;而是查询失败,并且返回一个错误。使用 SKIP LOCKED 的锁定子句不会等待获取表上的行锁;而是忽略相应行的读取。

降序索引

MySQL 8.0 支持降序排序的索引。这种索引中的值按照降序进行组织,并且支持正向扫描。在 8.0 之前,如果用户想要创建一个降序索引,实际上会创建一个升序索引,然后使用反向进行扫描访问。其中的一个好处就是正向索引扫描比反向索引扫描更快。另一个好处就是真正的降序索引可以针对混合 ASC/DESC 形式的 ORDER BY 子句使用索引而不是排序操作。

GROUPING 函数

MySQL 8.0 支持 GROUPING() 函数,即 SQL 标准中的 SQL_FEATURE T433。GROUPING() 函数可以区分总计行和常规分组行。GROUP BY 子句的扩展项,例如 ROLLUP,可以产生总计行,相应的总计属性使用空值表示。使用 GROUPING() 函数能够区分表示总计的空值和原始数据行中的 NULL 值。

JSON

MySQL 8.0 增加了新的 JSON 函数,并且提高了 JSON 数据的排序和分组性能。

JSON 路径表达式中的范围值

MySQL 8.0 扩展了 JSON 路径表达式的语法,能够支持范围值。例如 SELECT JSON_EXTRACT('[1,2,3,4,5]','$[1 to 3]'); 的结果为 [2,4]。新增加的语法遵循 SQL 标准,属于 SQL:2016,9.39 SQL/JSON path language: syntax and semantics。

JSON 表函数

MySQL 8.0 增加了 JSON 表函数,为 JSON 数据提供了 SQL 功能。JSON_TABLE() 创建了一个 JSON 数据的关系型视图。它将 JSON 数据结果映射成关系数据库中的行和列。用户可以将该函数的返回结果当作一个普通的表,使用 SQL 进行查询,例如连接、投影(SELECT)以及聚合。

JSON 聚合函数

MySQL 8.0 增加了聚合函数 JSON_ARRAYAGG(),用于生成 JSON 数组;增加了聚合函数 JSON_OBJECTAGG(),用于生成 JSON 对象。它们可以将多个 JSON 文档组合成一个 JSON 数组或者 JSON 对象。

JSON 合并函数

函数 JSON_MERGE_PATCH() 实现了 RFC7396 规定的 JavaScript(以及其他脚本语言)的语义,即使用第二个文档覆盖第一个文档中的重复项。例如,JSON_MERGE_PATCH('{"a":1,"b":2 }','{"a":3,"c":4 }'); # returns {"a":3,"b":2,"c":4}

JSON 排序改进

MySQL 8.0 使用可变长度的排序键,提高了 JSON 数据排序/分组的性能。初步的基准测试显示,基于不同的场景,排序性能为之前的 1.2 到 18 倍不等。

JSON 部分更新

MySQL 8.0 增加了函数 JSON_REMOVE()JSON_SET()JSON_REPLACE() 的部分更新支持。如果只有 JSON 文档的部分内容进行了更新,处理程序将会知道修改的内容, 因此存储引擎和复制程序不需要重写整个文档。

GIS

MySQL 8.0 提供了地理信息支持。包括空间引用系统(SRS)的元数据支持,以及 SRS 相关的空间数据类型、空间索引和空间函数。

字符集

MySQL 8.0 使用 UTF8MB4 作为默认字符集。UTF8MB4 是 web 应用中的主要的字符编码格式,因此这个改变将会使得绝大多数 MySQL 用户更加方便。

成本模型

查询优化器考虑数据缓存

MySQL 8.0 开始基于数据位于内存还是磁盘选择查询计划。这一操作将会自动执行,用户不需要进行任何配置。在此之前,MySQL 成本模型假设数据总是位于磁盘之中。在内存中查询数据的成本常量与查询磁盘数据的成本常量不同;因此,优化器会基于数据位置的信息为这两种情形选择更优的访问方法。

优化器直方图

MySQL 8.0 实现了直方图统计。使用直方图,用户可以创建关于表中字段值的数据分布统计信息,通常是非索引字段的统计信息, 然后可以用于查询优化器寻找更优的查询计划。直方图主要用于计算“COLUMN operator CONSTANT”形式的谓词的选择性(过滤效果)。

可靠性

事务型数据字典

MySQL 8.0 通过使用事务型的数据字典表,确保了 DDL 操作的原子性和故障恢复性,因而提高了系统的可靠性。从此,用户的任何 DDL 语句能够保证完全执行或者都不执行,也就是原子性。这对于复制尤其重要,否则的话主节点和从节点之间可能存在不一致,引起数据漂移。

可观察性

Information Schema(性能提升)

MySQL 8.0 重新实现了 Information Schema。在新的实现中 Information Schema 表变成了数据字典表上的简单视图,数据存储在 InnoDB 存储引擎中。这种方式比之前的性能提升了 100 倍。

Performance Schema(性能提升)

MySQL 8.0 通过在相关表上添加 100 多个索引,提高了 performance schema 上的查询速度。

可管理性

隐藏索引

MySQL 8.0 支持索引的可见性(可见/不可见)。优化器选择执行计划时不会考虑隐藏索引;但是,数据库仍然会在后台维护隐藏索引,因此可以很方便地将其设置为可见。这样做可以让DBA / DevOp 是否需要删除某个索引。如果怀疑某个索引没有被使用,可以先将它设置为不可见,然后监控查询的性能,如果没有查询语句受到影响,最后可以删除该索引。

高可用性

MySQL InnoDB Cluster 提供了一个集成的原生数据库 HA 解决方案。它完成了 MySQL Server 与 Group Replication、MySQL Router 以及 MySQL Shell 的紧密集成,不需要依赖于外部工具、脚本或者其他组件。

安全特性

社区版默认使用 OpenSSL

MySQL 8.0 为企业版和社区版统一了默认的 TLS/SSL 库,即 OpenSSL 。

SQL 角色

MySQL 8.0 引入了 SQL 角色(Role)的概念。角色是一个命名的权限集合。增加角色主要是为了简化用户访问权限管理。可以将角色授予用户,将权限授予角色,创建角色,删除角色,以及设置会话中的可用角色。

性能

MySQL 8.0 比 MySQL 5.7 性能快 2 倍。MySQL 8.0 读/写工作负载、IO集中型负载以及高竞争“热数据”工作负载时的性能更好。

performance

读/写工作负载可扩展性

MySQL 8.0 在读写负载和高写入负载时的可扩展性很好。与 MySQL 5.7 相比,在读写密集型的工作负载时,达到 4 个并发用户就能获得更好的性能;在高负载式能够获得 2 倍以上的性能提升。可以说在 5.7 时显著地改进了只读负载的可扩展性,而在 8.0 时,这种改进包含了读/写工作负载。效果就是 MySQL 提供了标配的服务器硬件(例如 2 个物理核的系统)的利用率,这是由于 InnoDB 写入 REDO 日志的重新设计。在以前的实现中,用户线程不断尝试记录自己的数据修改;而新的 REDO 日志写入方案中,用户线程不再需要锁定,REDO 的写入和缓存刷新都由专用的后台线程进行管理,整个 REDO 的处理基于事件驱动的方式实现。

利用 IO 性能 (快速存储器)

MySQL 8.0 允许用户充分使用各种存储设备的性能。例如,在 Intel Optane 闪存设备上测试完全基于 IO 访问的工作负载时,能够达到 1 百万 QPS。

高竞争(热点数据)负载时的性能更优

MySQL 8.0 显著提高了高竞争工作负载时的性能。高竞争负载通常发生在多个事务等待某个表中相同数据行的锁资源时,导致产生等待事务队列。许多真实的工作负载并不是平缓的,比如说,在一天之中的某些时候存在高峰值。MySQL 8.0 针对这些爆发的负载在以下各方面表现更好: TPS、平均延迟以及 95% 延迟。对于终端用户的好处就是更好的硬件利用率(效率),因为系统只需要更少的空闲容量,能够支持更高的平均负载。

MySQL 8.0 企业版

MySQL 企业版为任务关键性应用提供了以下额外的功能:

  • MySQL Enterprise Backup 支持完全备份、增量备份、部分备份、时间点恢复以及备份压缩。
  • MySQL Enterprise High Availability 支持集成的原生 InnoDB 集群 HA 。
  • MySQL Enterprise Transparent Data Encryption(TDE) 用于数据加密。
  • MySQL Enterprise Encryption 用于加密、密钥生成、数字签名以及其他加密功能。
  • MySQL Enterprise Authentication 可以与已有的安全系统进行集成,包括 PAM 和 Windows Active Directory。
  • MySQL Enterprise Firewall 可以实时防护针对数据库的特定攻击,例如 SQL 注入。
  • MySQL Enterprise Audit 可以为新的应用或已有应用添加基于策略的审计合规性。
  • MySQL Enterprise Monitor 用于管理数据库基础设施。
  • Oracle Enterprise Manager 可以通过 OEM 监控 MySQL 数据库。

MySQL 云服务

Oracle MySQL Cloud Service 基于 MySQL 企业版构建,由 Oracle Cloud 提供技术支持,可以为我们提供企业级的 MySQL 数据库服务。它支持一流的管理工具、自助服务配置、灵活的伸缩性以及多层安全性。

资源

MySQL 在线文档
MySQL 下载链接

原文地址:https://tonydong.blog.csdn.net

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


在正式开始之前,我们先来看下 MySQL 服务器的配置和版本号信息,如下图所示: “兵马未动粮草先行”,看完了相关的配置之后,我们先来创建一张测试表和一些测试数据。 -- 如果存在 person 表先删除 DROP TABLE IF EXISTS person; -- 创建 person 表,其中
> [合辑地址:MySQL全面瓦解](https://www.cnblogs.com/wzh2010/category/1859594.html "合辑地址:MySQL全面瓦解") # 1 为什么需要数据库备份 - 灾难恢复:当发生数据灾难的时候,需要对损坏的数据进行恢复和
物理服务机的CPU、内存、存储设备、连接数等资源有限,某个时段大量连接同时执行操作,会导致数据库在处理上遇到性能瓶颈。为了解决这个问题,行业先驱门充分发扬了分而治之的思想,对大库表进行分割,
然后实施更好的控制和管理,同时使用多台机器的CPU、内存、存储,提供更好的性能。而分治有两种实现方式:垂直拆
1 回顾 上一节我们详细讲解了如何对数据库进行分区操作,包括了 垂直拆分(Scale Up 纵向扩展)和 水平拆分(Scale Out 横向扩展) ,同时简要整理了水平分区的几种策略,现在来回顾一下。 2 水平分区的5种策略 2.1 Hash(哈希) 这种策略是通过对表的一个或多个列的Ha
navicat查看某个表的所有字段的详细信息 navicat设计表只能一次查看一个字段的备注信息,那怎么才能做到一次性查询表的信息呢?SELECT COLUMN_NAME,COLUMN_COMMENT,COLUMN_TYPE,COLUMN_KEY FROM information_schema.CO
文章浏览阅读4.3k次。转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52768613前言:数据库每天的数据不断增多,自动删除机制总体风险太大,想保留更多历史性的数据供查询,于是从小的hbase换到大的hbase上,势在必行。今天记录下这次数据仓库迁移。看下Agenda:彻底卸载MySQL安装MySQL_linux服务器进行数据迁移
文章浏览阅读488次。恢复步骤概要备份frm、ibd文件如果mysql版本发生变化,安装回原本的mysql版本创建和原本库名一致新库,字符集都要保持一样通过frm获取到原先的表结构,通过的得到的表结构创建一个和原先结构一样的空表。使用“ALTER TABLE DISCARD TABLESPACE;”命令卸载掉表空间将原先的ibd拷贝到mysql的仓库下添加用户权限 “chown . .ibd”,如果是操作和mysql的使用权限一致可以跳过通过“ALTER TABLE IMPORT TABLESPACE;”命令恢_alter table discard tablespace
文章浏览阅读225次。当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化:单表优化除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量:字段尽量使用TINYINT、SMALLINT、MEDIUM_INT作为整数类型而非INT,如果非负则加上UNSIGNEDVARCHAR的长度只分配_开发项目 浏览记录表 过大怎么办
文章浏览阅读1.5k次。Mysql创建、删除用户MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束):1.新建用户登录MYSQL:@>mysql -u root -p@>密码创建用户:mysql> insert into mysql.user(Host,User,Password) values("localhost_删除mysql用户组
MySQL是一种开源的关系型数据库管理系统,被广泛应用于各类应用程序的开发中。对于MySQL中的字段,我们需要进行数据类型以及默认值的设置,这对于数据的存储和使用至关重要。其中,有一个非常重要的概念就是MySQL字段默认字符串。 CREATE TABLE `my_...
MySQL是一个流行的开源关系型数据库管理系统,广泛应用于Web应用程序开发、数据存储和管理。在使用MySQL时,正确设置字符集非常重要,以确保数据的正确性和可靠性。 在MySQL中,字符集表示为一系列字符和字母的集合。MySQL支持多种字符集,包括ASCII、UTF...
MySQL存储函数 n以内偶数 MySQL存储函数能够帮助用户简化操作,提高效率,常常被用于计算和处理数据。下面我们就来了解一下如何使用MySQL存储函数计算n以内的偶数。 定义存储函数 首先,我们需要定义一个MySQL存储函数,以计算n以内的偶数。下...
MySQL是一个流行的关系型数据库管理系统,基于客户机-服务器模式,可在各种操作系统上运行。 MySQL支持多种字符集,不同的字符集包括不同的字符,如字母、数字、符号等,并提供不同的排序规则,以满足不同语言环境的需求。 //查看MySQL支持的字符集与校对规...
在MySQL数据库中,我们有时需要对特定的字符串进行截取并进行分组统计。这种操作对于数据分析和报表制作有着重要的应用。下面我们将讲解一些基本的字符串截取和分组统计的方法。 首先,我们可以使用substring函数对字段中的字符串进行截取。假设我们有一张表stude...
MySQL提供了多种字符串的查找函数。下面我们就一一介绍。 1. LIKE函数 SELECT * FROM mytable WHERE mycolumn LIKE 'apple%'; 其中"apple%"表示以apple开头的字符串,%表示任意多个字符...
MySQL 是一种关系型数据库管理系统,广泛应用于各种不同规模和类型的应用程序中。在 MySQL 中,处理字符串数据是很常见的任务。有时候,我们需要在字符串的开头添加一定数量的 0 ,以达到一定的位数。比如,我们可能需要将一个数字转换为 4 位或 5 位的字符串,不足的...
MySQL是一种流行的关系型数据库管理系统,支持多种数据类型。以下是MySQL所支持的数据类型: 1. 数值型数据类型: - TINYINT 保存-128到127范围内的整数 - SMALLINT 保存-32768到32767范围内的整数 - MEDIU...
MySQL中存储Emoji表情字段类型 在现代互联网生态中,表情符号已经成为人们展示情感和思想的重要方式之一,因此将表情符号存储到数据库中是一个经常出现的问题。MySQL作为最流行的开源关系型数据库管理系统之一,也需要能够存储和管理这些表情符号的字段类型。 UT...
MySQL是一种关系型数据库管理系统。在MySQL数据库中,有多种不同的数据类型。而其中,最常见的数据类型之一就是字符串类型。在MySQL中,字符串类型的数据通常会被存储为TEXT或VARCHAR类型。 首先,让我们来看一下VARCHAR类型。VARCHAR是My...
MySQL字符串取整知识详解 MySQL是一种开源的关系型数据库管理系统,广泛应用于各个领域。在使用MySQL过程当中,我们经常需要对数据进行取整操作。本文将介绍如何使用MySQL字符串取整来处理数据取整问题。 什么是MySQL字符串取整? MySQL...