MySQL 8.0 新特性


原文地址: Announcing General Availability of 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, 3, 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 下载链接

猜你喜欢

转载自blog.csdn.net/horses/article/details/80702494
今日推荐