第18章 MySQL8其它特性
创作日期:2021-12-03
MySQL 从5.7版本直接跳跃发布了8.0版本,可见这是一个令人兴奋的里程碑版本。MySQL版本在功能上做了显著的改进与增强,开发者对MySQL的源代码进行了重构,最突出的一点是多MySQL Optimlzer优化器进行了改进。不仅在速度上得到了改进,还为用户带来了更好的性能和更棒的体验。
1.MySQL8新特性概述
1.1 MySQL8.0 新增特性
- 更简便的NoSQL支持
NoSQL泛指非关系型数据库和数据存储。随着发展,传统的关系型数据库已经越来越不能满足需求。从5.6版本开始,MySQL就开始支持简单的NoSQL存储功能。MySQL8 对这一功能做了优化,以更灵活的方式实现NoSQL功能,不再依赖模式(schema)。
- 更好的索引
在查询中,正确地使用索引可以提高查询的效率。MySQL8 中新增了 隐藏索引 和 降序索引。隐藏索引可以用来测试去掉索引对查询性能的影响。在查询中混合存在多列索引时,使用降序索引可以提高查询的性能。
- 更完善的JSON支持
MySQL 从5.7开始支持原生JSON数据的存储,MySQL8 对这一功能做了优化,增加了聚合函数 JSON_ARRAYAGG() 和 JSON_OBJECTAGG(),将参数聚合为JSON数组或对象,新增了行内操作符 ->>,是列路径运算符 ->的增强,对JSON排序做了提升,并优化了JSON的更新操作。
- 安全和账户管理
MySQL8 中新增了 caching_sha2_password 授权插件,角色,密码历史记录和FIPS模式支持,这些特性提高了数据库的安全性和性能,使数据库管理员能够更灵活地进行账户管理工作。
- InnoDB的变化
InnoDB 是 MySQL 默认存储引擎,是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键。在MySQL8 版本中,InnoDB在自增,索引,加密,死锁,共享锁等方面做出了大量的 改进和优化 ,并且支持原子数据定于语言(DDL),提高了数据安全性,对事务提供了更好的支持。
- 数据字典
在之前的MySQL版本中,字典数据都存储在元数据文件和非事务表中。从MySQ提交。对于MySQL5.7复制到MySQL8 版本中的语句,可以添加 IF EXISTS 或 IF NOT EXISTS 语句来避免发生错误。
- 原子数据定义语句
MySQL8 开始支持原子数据定义语句(Automic DDL),及原子DDL。目前,只有InnoDB存储引擎支持原子DDL。原子数据定义语句(DDL)将与DDL操作相关的数据字典更新,存储引擎操作,二进制日志写入结合到一个单独的原子事务中,这使得即使服务器崩溃,事务也会提交或回滚。
使用支持原子操作的存储引擎所创建的表,在执行DROP TABLE,CREATE TABLE ,ALTER TABLE, RENAME TABLE,TRUNCATE TABLE,DROP TABLESPACE ,CREATE TABLESPACE等操作时,都支持原子操作,即事务要么完全操作成功,要么失败后回滚,不再进行部分提交。对于从MySQL5.7 复制到 MySQL8 版本中的语句,可以添加 IF EXISTS 或 IF NOT EXISTS 语句来避免发生错误。
- 资源管理
MySQL8 开始支持创建和管理资源组,允许将服务器内运行的线程分配给特定的分组,以便线程根据组内可用资源执行。组属性能够控制组内资源,启用或限制组内资源消耗。数据库管理员能够根据不同的工作负载适当的更改这些属性。
目前,CPU时间是可控资源,由“虚拟CPU”这个概念来表示,此术语包含CPU的核心数,超线程,硬件线程等等。服务器在启动时确定可用的虚拟CPU数量。拥有对应权限的数据库管理员可以将这些CPU与资源组关联,并为资源组分配线程。
资源组组件为MySQL中的资源组管理提供了SQL接口。资源组的属性用于定义资源组。MySQL中存在两个默认组,系统组和用户组,默认的组不能被删除,其属性也不能被更改。对于用户自定义的组,资源组创建时可初始化所有的属性,除去名字和类型,其他属性都可以在创建之后进行更改。
在一些平台下,或进行了某些MySQL的配置时,资源管理的功能将受到限制,甚至不可用。例如,如果安装了线程池插件,或者使用的是macOS系统,资源管理将处于不可用状态。在FreeBSD和Solaeis系统中,资源线程优先级将失效。在Linux系统中,只有配置了CAP_SYS_NICE 属性,资源管理优先级才能发挥作用。
- 字符集支持
MySQL8 中默认的字符集由 latin1