10 个开发者必知的 MySQL 8.0 新功能

翻译 Summer ⋅ 于 3个月前 ⋅ 最后回复由 yanthink 1周前 ⋅ 4788 阅读 ⋅ 原文地址

站点的翻译文章创建时,您将第一时间收到通知。

这是一篇社区协同翻译的文章,已完成翻译,更多信息请点击 协同翻译介绍

file

下面将以 MySQL 社区的优先级从高到低来展示这些功能:

TOP 10

  1. MySQL 文档存储
  2. 默认 utf8mb4 编码
  3. JSON 增强
  4. CTEs(译者注:Common Table Expresssions 公共表格表达式)
  5. 窗口函数
  6. 降序索引
  7. 更好的优化器消费模型
  8. MySQL 服务器组件
  9. GIS(译者注:Geographic Information System 地理信息系统) 提升
  10. InnoDB 引擎的 NO WAIT 和 SKIP \ LOCKED 选项
JiaZombie 翻译于 3个月前

1. MySQL 文档存储

这是 MySQL 8.0 中最受期待和最受欢迎的特性 ... 同时他非常容易理解。

我对 MySQL 文档存储非常兴奋,我在全球各地展示他快一年的时间,并收到了很多好的反馈。 为什么 MySQL DS 如此优秀? 因为使用一种解决方案你可以处理 SQL 和 NoSQL。你也可以将两种语言的优势结合起来。 你可以对相同数据执行 CRUD 命令,同时你也可以在 SQL 中执行如连接多个表及 and/or 集合这种更复杂的查询。

同时后端是众所周知强大的 InnoDB 引擎, MySQL 文档存储引擎完全符合 ACID 标准。 因为他都在 MySQL 内部,所以你可以从你熟悉的内容中收益,亦可以将其转换到文档存储: replication, performance_schema, ...

2. 默认字符集为 utf8mb4

使用 MySQL 8.0, 我们当然关注现代 Web 应用... 这是指移动端! 当我们提到手机端, 也是表情符号和大量的需要共存的字符集和归类。

这就是为什么我们决定将默认的字符集从 latin-1 转为 utf8mb4。 MySQL支持最新的 Unicode 9.0 基于 DUCET 的新分类, 重音和大小写敏感的归类,日语,俄语,...

BradStev 翻译于 3个月前

3. JSON 强化

MySQL 带来了一些新的 JSON 相关变更:

  • 新增 ->> 表达式,作用等于 JSON_UNQUOTE(JSON_EXTRACT())
  • 新的聚合函数 JSON_ARRAYAGG() 和 JSON_OBJECTAGG()
  • 新增 JSON_PRETTY()
  • 新的 JSON 工具函数如 JSON_STORAGE_SIZE()JSON_STORAGE_FREE()

MySQL 8.0 中 JSON 最重要的优化之一,是提供了一个 JSON_TABLE() 函数。此函数接受 JSON 格式的数据,然后将其转化为关系型数据表。字段和数据的格式都可以被指定。你也可以对 JSON_TABLE() 以后的数据使用正常的 SQL 查询,如 JOINS, 聚合查询等, ... 你可以查阅 @stoker 的博文 ,当然你也可以阅读 官方文档 。

需要注意的是,这不仅仅影响到开发者的使用,MySQL 的执行性能也会受到影响。在老系统中,更新 JSON 时系统会删除老数据并写入新的数据,在新系统中,如果你要更新 JSON 数据里的某个字段,正确的做法是直接对 JSON 里的某个字段进行更新,这样执行效率更佳,并且数据库主从复制(Replication)性能也会受益。

4. 公共表格表达式 (CTEs)

MySQL 8.0 新增了 CTEs 功能(译者注:Common Table Expresssions 公共表格表达式)。CTE 是一个命名的临时结果集,仅在单个 SQL 语句的执行范围内存在,可以是自引用,也可以在同一查询中多次引用。

MRWang 翻译于 3个月前

5. 统计分析方法

针对查询中的每一行,一个统计分析方法使用该行关联的行执行计算。 这就像 GROUP BY 方法但他是保留行而不是折叠他们。

以下是 MySQL 8.0.4 当前实现的统计分析方法列表:

名称 描述
CUME_DIST() 累计分配值
DENSE_RANK() 当前行在分区的排名, 没有间隔
FIRST_VALUE() 窗口框架第一行的参数值
LAG() 分区中指定行落后于当前行的参数值
LAST_VALUE() 窗口框架第一行的参数值
LEAD() 分区中引导当前行的参数值
NTH_VALUE() 从第N行窗口框架的参数值
NTILE() 分区中当前行的桶号
PERCENT_RANK() 百分比等级值
RANK() 当前行在分区中的排名,含间隔
ROW_NUMBER() 其分区中的当前行数

6. 降序索引

在 MySQL 8.0 之前, 当在索引定义中使用 DESC 时该标志将被忽略。 现在不再是这样了! 现在键值按降序存储。以前, 索引可能被按相反顺序扫描,但性能会受到影响。可以按顺序扫描倒序索引,这将更高效。

BradStev 翻译于 3个月前

7. 更好的优化器开销模型

新的优化器开销模型(Optimizer Cost Model)现在会计算内存缓存数据和硬盘数据。推荐阅读 Øystein 的博客文章.

8. MySQL 服务器模块

你可以利用此特性来扩展 MySQL 服务器的功能,这将会比插件更加容易开发和维护,推荐阅读 官方文档

9. GIS 的提升

MySQL 8.0 对 GIS(译者注:Geographic Information System 地理信息系统) 的支持有非常高的提升,功能上直追 PostgreSQL。

一些例子:

  • 坐标轴将拥有单位
  • 地理坐标系统
  • 坐标轴将不会偏移
  • 坐标轴支持排序
  • 坐标轴支持方向相关性
MRWang 翻译于 3个月前

10. InnoDB 引擎 NO WAIT 与 SKIP LOCKED

MySQL 8.0 的 InnoDB 引擎现在可以更好的处理热行争抢。 InnoDB 支持 NOWAIT 和 SKIP\ LOCKED 选项与 SELECT ... FOR\ SHARE 和 SELECT ... FOR\ UPDATE 锁定读取语句。 NOWAIT 会在请求行被其他事务锁定的情况下立即返回语句。 SKIP LOCKED 从结果集中删除被锁定的行。 参见 使用 NOWAIT 和 SKIP LOCKED 锁定并发读取.

当然好的 MySQL 8.0 特性列表不会在这里结束, 例如 支持正则表达式  也是一个刚刚出现在 [8.0.4] 版本中的有趣的特性 (https://mysqlserverteam.com/the-mysql-8-0-4-release-candidate-is-available/)。 新的 SQL GROUPING() 功能,  IPV6 和 UUID 操作新业务,更多优化器提示...

我希望这给你一个很好的概述,是什么样的请求在驱动 MySQL 的创新。下一篇文章将介绍应该使得开发者满意的 MySQL 8.0 特性 ?

BradStev 翻译于 3个月前

原文地址:http://lefred.be/content/top-10-mysql-8-...

译文地址:https://laravel-china.org/topics/10243/m...


本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

本帖已被设为精华帖!
回复数量: 4
您需要登陆以后才能留下评论!

Composer 中国全量镜像

Top 250 扩展包

Lumen 中文文档

Laravel 速查表

Laravel 中文文档

Laravel 项目开发规范

Laravel 开发环境部署

Composer 中文文档

Elasticsearch-PHP 中文文档

Lumen 中文文档

GraphQL PHP 中文文档

社区文档撰写指南

TDD 构建 Laravel 论坛笔记

PHP PSR 标准规范

PHP 设计模式全集

Dingo API 中文文档