MySQL 8.0 新特性

MySQL 8.0 新特性详解
MySQL 8.0引入了许多新特性,包括系统表全部转为InnoDB,默认字符集改为utf8mb4避免乱码问题,自增变量持久化防止重启后冲突,新增加密函数提高数据安全性,引入窗口函数简化复杂查询,GROUP BY不再隐式排序,通用表表达式(CTE)提升查询效率,DDL操作原子化保证事务完整性,以及支持降序索引增强索引灵活性。

文章首发地址

1.系统表全部为InnoDB表

从MySQL 8.0开始,系统表全部换成事务型的InnoDB表,默认的MySQL实例将不包含任何MyISAM表,除非手动创建MyISAM表。

2.默认字符集改为utf8mb4

在MySQL 8.0版本之前,默认字符集为latin1,utf8字符集指向的是utf8mb3。网站开发人员在数据库设计的时候往往会将编码修改为utf8字符集。如果遗忘修改默认的编码,就会出现乱码的问题。从MySQL 8.0开始,数据库的默认编码改为utf8mb4,从而避免了上述的乱码问题。(比如图片表情的存储)

3.自增变量的持久化

在MySQL 8.0之前,自增主键AUTO_INCREMENT的值如果大于max(primary key)+1,在MySQL重启后,会重置AUTO_INCREMENT=max(primary key)+1,这种现象在某些情况下会导致业务主键冲突或者其他难以发现的问题。

在MySQL 5.7系统中,对于自增主键的分配规则,是由InnoDB数据字典内部一个计数器来决定的,而该计数器只在内存中维护,并不会持久化到磁盘中。

MySQL 8.0将自增主键的计数器持久化到重做日志中。每次计数器发生改变,都会将其写入重做日志中。如果数据库重启,InnoDB会根据重做日志中的信息来初始化计数器的内存值。为了尽量减小对系统性能的影响,计

### MySQL 8.0 新特性介绍 #### 多值索引与文档存储支持 MySQL 8.0.17 开始支持 JSON 数组的多值索引,这一特性显著增强了 MySQL 的 NoSQL 功能。多值索引属于函数索引,通过虚拟列实现,允许在文档属性上创建索引并支持多个值。这使得 MySQL 在处理文档型数据时,可以更好地支持类似 MongoDB 的应用场景,减少技术栈的复杂性和学习成本 [^1]。 #### InnoDB 死锁检测优化 MySQL 8.0 引入了一个新的动态变量 `innodb_deadlock_detect`,用于控制系统是否执行 InnoDB 死锁检查。在高并发系统中,禁用死锁检查可以带来性能的提升。通过命令 `show variables like 'innodb_deadlock_detect';` 可以查看当前的死锁检测状态 [^2]。 #### 性能优化与并发处理 MySQL 8.0 在性能方面进行了显著改进,特别是在读写负载均衡和高并发场景下的现。在集中的读写负载情况下,4 个用户并发时,与 5.7 版本相比,性能提高了两倍。这些改进主要归功于对 InnoDB 写入 Redo 日志方法的重新设计。在 8.0 中,Redo 日志的写入和刷缓存操作由专用线程处理,用户线程之间不再争抢 Redo 写入锁,从而提高了硬件性能的利用率 [^3]。 #### 索引优化与函数索引支持 MySQL 8.0 支持反向索引扫描,当排序规则与索引规则相反时,能够有效利用索引,而无需额外的排序操作。此外,MySQL 8.0.13 开始支持函数索引(基于虚拟计算列实现的索引),允许在索引中使用函数(达式)的值,同时也支持降序索引和 JSON 数据的索引。例如,可以通过以下语句创建一个函数索引: ```sql -- 创建 create table demo2(c1 varchar(10), c2 varchar(10)); -- 创建普通索引 create index index_c1 on demo2(c1); -- 创建函数索引 create index func_index_c2 on demo2( (UPPER(c2)) ); ``` #### 总结 MySQL 8.0 在多个方面进行了重大改进,包括对 JSON 数据的支持、索引优化、性能提升以及并发处理能力的增强。这些新特性使得 MySQL 在处理现代应用的复杂需求时更加高效和灵活。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Walter Sun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值