首页 > 数据库 >MySQL系列之MySQL8.0新特性

MySQL系列之MySQL8.0新特性

时间:2022-10-30 10:06:47浏览次数:81  
标签:8.0 函数 -- 特性 索引 JSON MySQL8.0 MySQL


概述

本文非原创,整理网络资源学习备用。

MySQL 8.0 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能!

注意:从 MySQL 5.7 升级到 MySQL 8.0 仅支持通过使用 in-place 方式进行升级,不支持从 MySQL 8.0 降级到 MySQL 5.7(或从某个 MySQL 8.0 版本降级到任意一个更早的 MySQL 8.0 版本)。唯一受支持的替代方案是在升级之前对数据进行备份。

新特性

隐藏索引

隐藏索引的特性对于性能调试非常有用。在 8.0 中,索引可以被隐藏和显示。当一个索引隐藏时,它不会被查询优化器所使用。
即,可以隐藏一个索引然后观察对数据库的影响。如果数据库性能有所下降,就说明这个索引是有用的,于是将其恢复显示即可;如果数据库性能看不出变化,说明索引是多余的,可删除。
隐藏索引的语法:​​​ALTER TABLE t ALTER INDEX i INVISIBLE;​​​ 恢复显示该索引的语法:​​ALTER TABLE t ALTER INDEX i VISIBLE;​

当一个索引被隐藏时,可从​​show index​​命令输出中看到,该索引Visible 属性值为 NO。当索引被隐藏时,它的内容仍然是和正常索引一样实时更新的,这个特性本身是专门为优化调试使用。如果你长期隐藏一个索引,那还不如干脆删掉,因为索引的存在会影响插入、更新和删除的性能。

CTE

通用表表达式,Common Table Expressions,复杂的查询会使用嵌入式表:

SELECT t1.*, t2.* FROM 
(SELECT col1 FROM table1) t1,
(SELECT col2 FROM table2) t2;

基于CTE的简化写法:

WITH
t1 AS (SELECT col1 FROM table1),
t2 AS (SELECT col2 FROM table2)SELECT t1.*, t2.*
FROM t1, t2;

这样看上去层次和区域都更加分明,改起来也更清晰的知道要改哪一部分。
​​​CTE官方文档​

窗口函数

Window Functions,也叫开窗函数,MySQL 8 以前缺少​​rank()​​等开窗函数,当需要在查询当中实现排名时,必须手写 @ 变量。

推荐阅读:
​SQL开窗函数​​Hive系列之开窗函数

窗口函数有点像是 SUM()、COUNT() 那样的集合函数,但它并不会将多行查询结果合并为一行,而是将结果放回多行当中。即,窗口函数是不需要 GROUP BY 的。

​窗口函数官方文档​

Instant Add Column

ALGORITHM=INSTANT 目前对6种ddl有效:

  • Adding a column. This feature is referred to as Instant Add Column . 添加列
  • Adding or dropping a virtual column. 添加或删除virtual 列
  • Adding or dropping a column default value. 添加或删除列默认值
  • Modifying the definition of an ENUM. 修改 ENUM 定义
  • Changing the index type. 修改索引类型
  • Renaming a table. 重命名表

调整

UTF-8 编码

从 MySQL 8 开始,数据库的缺省编码将改为 utf8mb4,包含所有 emoji 字符。

设置持久化

MySQL设置可以在运行时通过​​SET GLOBAL​​​命令来来时生效,下次启动时数据库又会从配置文件中读取。
新增SET PERSIST 命令:​​​SET PERSIST max_connections = 500;​​ MySQL 会将该命令的配置保存到数据目录下的 mysqld-auto.cnf 文件中,下次启动时会读取该文件,用其中的配置来覆盖缺省的配置文件。

优化

JSON

官方文档:

​https://dev.mysql.com/doc/refman/8.0/en/json.html​​ https://dev.mysql.com/doc/refman/8.0/en/json-utility-functions.html

MySQL 5.7开始提供NoSQL存储的功能。
MySQL 8 大幅改进对 JSON 的支持,添加基于路径查询参数从 JSON 字段中抽取数据的 JSON_EXTRACT() 函数,以及用于将数据分别组合到 JSON 数组和对象中的 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 聚合函数。

概述

  • 不允许为null
  • JSON格式定义与LONGBLOB or LONGTEXT类似,最大长度受​​max_allowed_packet​​控制
  • 查看JSON字段所占用空间大小的函数​​JSON_STORAGE_SIZE(xxx)​
  • 除普通的JSON操作,额外支持GeoJSON (基于几何图形的针对地理空间数据交换格式)一些相关操作
  • 对JSON栏位支持索引(结合Mysql8.0新特性,函数index)
  • 一个可以支持部分的,原地更新Json Column 的可选优化项加入MySql8.0
  • 可以使用的函数有JSON_SET(), JSON_REPLACE() ,JSON_REMOVE()
  • 使用时,有一些约束,但是会有更加的性能

新增

JSON_PRETTY:接受JSON数据类型或JSON的字符串表示形式,并以新的行和缩进方式以人类可读的方式返回JSON格式的字符串。
JSON_STORAGE_SIZE:

实例

-- JSON_ARRAY定义JSON数组
SELECT JSON_ARRAY(1, 'abc', NULL, TRUE, CURTIME());
-- [1, "abc", null, true, "11:30:24.000000"]

-- JSON_OBJECT定义JSON对象
SELECT JSON_OBJECT('id', 87, 'name', 'carrot');
-- {"id": 87, "name": "carrot"}

-- 数组与对象嵌套的场景
[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]] {"k1": "value", "k2": [10, 20]}

-- 日期/时间类型定义
["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]

-- JSON_QUOTE 将JSON对象转义成String, 将内部的符号进行转义,并整体包裹上双引号;
JSON_QUOTE(' "null" ');
-- "\"null\""

-- 将JSON内容美化并输出
JSON_PRETTY();

-- 可以将JSON/JSON内部的元素转化为其他数据类型;
-- 将JSON jdoc 中的id元素转化为 unsigned int;
ORDER BY CAST(JSON_EXTRACT(jdoc, '$.id') AS UNSIGNED);

合并JSON:​​JSON_MERGE_PRESERVE()​​​、​​JSON_MERGE_PATCH()​

参考

​10个开发者必知的 MySQL 8.0 新功能​​​​MySQL8.0新特性​

MySQL8.0的5个新特性
​​​MySQL性能基准测试对比:MySQL 5.7与MySQL 8.0​

​MySQL 8.0.12 instant add column 体验,亿级数据秒速增加字段
​​​MySQL引擎特性 8.0 Instant Add Column功能解析​​​​​

​mysql 8 新特性一 ALGORITHM=INSTANT 实现的快速DDL​


标签:8.0,函数,--,特性,索引,JSON,MySQL8.0,MySQL
From: https://blog.51cto.com/u_15851118/5807187

相关文章

  • MySQL常用代码片段
    概述每次想要实现一个功能时,总是百度Google,挺浪费时间的,于是整理得到此文。持续更新中。字符串截取函数length​​length(str)​​:返回str的长度left​​left(str,length)......
  • MySQL timestamp(3)问题
    背景最近在负责开发维护的一款数据平台,有一个功能是把数据从某个源头数据源(如常规的JDBC数据源,MySQL,Oracle等)推到目地数据源(还包括企微,MQ等)。一次推送数据就是一个任务,当然......
  • MySQL(零)
    MySQL前置1.MySQL介绍MySQL是一个开放源代码的关系型数据库管理系统.MySQL支持大型的数据库,可以处理拥有上千万条记录的大型数据库.MySQL使用标准的sql数据语言形式.......
  • JavaWeb-MySQL基础
    JavaWeb-MySQL基础1,数据库相关概念1.1数据库存储和管理数据的仓库,数据是有组织的进行存储。数据库英文名是DataBase,简称DB。数据库就是将数据存储在硬盘上,可......
  • MySQL库表操作小结(未完成)
    MySQL库表操作小结(以下cmd都是以管理员身份运行):一、启动MySQL1、配置好环境的情况下:(注意此处的myslq80需要看自己电脑上的MySQL服务名称:可通过cmd中输入serv......
  • 查看 MySQL 数据库文件储存位置
    #1.登录MySQLmysql-uroot-pEnterpassword:***#2.输入下面命令mysql>showglobalvariableslike"%datadir%";+---------------+------------------------......
  • MySQL操作命令
    1.操作数据库命令查看数据库showdatabases;查看当前选择的数据库selectdatabase();切换数据库used1;创建数据库语法createdatabased1;查看当前数据......
  • Windows Server 2008+IIS+php+MySQL环境搭建
    Win2008+IIS+php+MySQL环境搭建一、Windows环境操作系统:WindowsServer2008R2IIS版本:IIS7.5PHP版本:php5.6.9MySQL版本:MySQL5.7.40二、部署IIS1、打......
  • MySQL数据库数据类型
    MySQL数据库数据类型 MySQL数据类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。 数值类型:类型大小范围(有符号)范围(无符号)用途TINY......
  • Mysql日期函数
    --当前年SELECTDATE_FORMAT(NOW(),'%Y');--当前年月SELECTDATE_FORMAT(NOW(),'%Y%m');--当前年月日SELECTDATE_FORMAT(NOW(),'%Y%m%d');--当前年月日时......