关闭

开发者必知的MySQL 8.0 新功能

时间: 2019-09-02阅读: 1137标签: sql

下面将以 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 选项


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 的新分类, 重音和大小写敏感的归类,日语,俄语


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 语句的执行范围内存在,可以是自引用,也可以在同一查询中多次引用。


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 时该标志将被忽略。 现在不再是这样了! 现在键值按降序存储。以前, 索引可能被按相反顺序扫描,但性能会受到影响。可以按顺序扫描倒序索引,这将更高效。


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

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


8. MySQL 服务器模块

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


9. GIS 的提升

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

一些例子:

  • 坐标轴将拥有单位
  • 地理坐标系统
  • 坐标轴将不会偏移
  • 坐标轴支持排序
  • 坐标轴支持方向相关性


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/t...。 新的 SQL GROUPING() 功能,  IPV6 和 UUID 操作新业务,更多优化器提示

原文连接:https://learnku.com/laravel/t/10243/mysql-8-new-features-required-by-10-developers
站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/5107

关闭

常用SQL语句分享

日常工作或学习过程中,我们可能会经常用到某些SQL,建议大家多多整理记录下这些常用的SQL,这样后续用到会方便很多。笔者在工作及学习过程中也整理了下个人常用的SQL,现在分享给你!可能有些SQL你还不常用

为什么企业依赖于NoSQL

如果你关注大数据科技动向,你对 NoSQL 一定不陌生,NoSQL 是一个分布式数据库。在过去时间,数据存储一直关系型数据库天下,有着良好的控制并发操作、事务功能。

MySQL排名函数实现

现在有个需求对所有学生分数进行排名,并且列出名次。刚看到这个需求,我有点懵逼,完全没有思路:joy:,为什么难一点需求

这才是 SQL 优化的正确姿势

当然,本篇是关于性能优化的,那性能优化就应该一把梭子吗?还是要符合一些规范和原则呢?所以,在开始之前(MySQL 优化),咱们先来聊聊 性能优化 的一些原则。

Sql中Left Join、Right Join、Inner Join的区别?

left join(左联接) :返回包括左表中的所有记录和右表中联结字段相等的记录;right join(右联接) :返回包括右表中的所有记录和左表中联结字段相等的记录

Mysql性能优化:为什么你的count(*)这么慢?

在开发中一定会用到统计一张表的行数,比如一个交易系统,老板会让你每天生成一个报表,这些统计信息少不了sql中的count函数。但是随着记录越来越多,查询的速度会越来越慢

node.js防止Sequelize在执行查询时将SQL输出到控制台?

有没有办法得到这个不显示?一些标志,我在一个配置文件中设置某处?最佳答案创建Sequelize对象时,将false传递给logging参数:

sql语句备忘录

结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

mysqldump 备份数据库_mysqldump备份详解

数据备份是一个网站能够正常运营的保障,数据备份包括网站源码备份和数据库备份,如果你使用的是ACCESS数据库,那么直接使用FTP下载数据库文件就可以了,但如果你使用了PHP+MYSQL进行网站建设,数据库备份就没有那么容易了。

websql操作类封装

由于websql操作都是异步操作,当我们为了获取到websql操作的结果之后再进行后续操作时,往往是通过回调函数来实现的,当回调一多的时候,回调地狱就出现了,为了解决回调地狱问题,我将通过Promise来改写,后续调用时

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!