文章转发自专业的Laravel开发者社区,原始连接:learnku.com/laravel/t/1…html
下面将以 MySQL 社区的优先级从高到低来展现这些功能:mysql
这是 MySQL 8.0 中最受期待和最受欢迎的特性 ... 同时他很是容易理解。laravel
我对 MySQL 文档存储很是兴奋,我在全球各地展现他快一年的时间,并收到了不少好的反馈。 为何 MySQL DS 如此优秀? 由于使用一种解决方案你能够处理 SQL 和 NoSQL。你也能够将两种语言的优点结合起来。 你能够对相同数据执行 CRUD 命令,同时你也能够在 SQL 中执行如链接多个表及 and/or 集合这种更复杂的查询。正则表达式
同时后端是众所周知强大的 InnoDB 引擎, MySQL 文档存储引擎彻底符合 ACID 标准。 由于他都在 MySQL 内部,因此你能够从你熟悉的内容中收益,亦能够将其转换到文档存储: replication, performance_schema, ...sql
使用 MySQL 8.0, 咱们固然关注现代 Web 应用... 这是指移动端! 当咱们提到手机端, 也是表情符号和大量的须要共存的字符集和归类。数据库
这就是为何咱们决定将默认的字符集从 latin-1 转为 utf8mb4。 MySQL支持最新的 Unicode 9.0 基于 DUCET 的新分类, 重音和大小写敏感的归类,日语,俄语,...json
MySQL 带来了一些新的 JSON 相关变动:后端
->>
表达式,做用等于 JSON_UNQUOTE(JSON_EXTRACT())
JSON_ARRAYAGG()
和 JSON_OBJECTAGG()
JSON_PRETTY()
JSON_STORAGE_SIZE()
, JSON_STORAGE_FREE()
MySQL 8.0 中 JSON 最重要的优化之一,是提供了一个 JSON_TABLE()
函数。此函数接受 JSON 格式的数据,而后将其转化为关系型数据表。字段和数据的格式均可以被指定。你也能够对 JSON_TABLE()
之后的数据使用正常的 SQL 查询,如 JOINS, 聚合查询等, ... 你能够查阅 @stoker 的博文 ,固然你也能够阅读 官方文档 。缓存
须要注意的是,这不只仅影响到开发者的使用,MySQL 的执行性能也会受到影响。在老系统中,更新 JSON 时系统会删除老数据并写入新的数据,在新系统中,若是你要更新 JSON 数据里的某个字段,正确的作法是直接对 JSON 里的某个字段进行更新,这样执行效率更佳,而且数据库主从复制(Replication)性能也会受益。服务器
MySQL 8.0 新增了 CTEs 功能(译者注:Common Table Expresssions 公共表格表达式)。CTE 是一个命名的临时结果集,仅在单个 SQL 语句的执行范围内存在,能够是自引用,也能够在同一查询中屡次引用。
针对查询中的每一行,一个统计分析方法使用该行关联的行执行计算。 这就像 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() |
其分区中的当前行数 |
在 MySQL 8.0 以前, 当在索引定义中使用 DESC 时该标志将被忽略。 如今再也不是这样了! 如今键值按降序存储。之前, 索引可能被按相反顺序扫描,但性能会受到影响。能够按顺序扫描倒序索引,这将更高效。
新的优化器开销模型(Optimizer Cost Model)如今会计算内存缓存数据和硬盘数据。推荐阅读 Øystein 的博客文章.
你能够利用此特性来扩展 MySQL 服务器的功能,这将会比插件更加容易开发和维护,推荐阅读 官方文档。
MySQL 8.0 对 GIS(译者注:Geographic Information System 地理信息系统) 的支持有很是高的提高,功能上直追 PostgreSQL。
一些例子:
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] 版本中的有趣的特性 (mysqlserverteam.com/the-mysql-8…)。 新的 SQL GROUPING()
功能, IPV6 和 UUID 操做新业务,更多优化器提示...
我但愿这给你一个很好的概述,是什么样的请求在驱动 MySQL 的创新。下一篇文章将介绍应该使得开发者满意的 MySQL 8.0 特性 ?