一大早收到一封oracle官方发来的邮件,邀请我参加mysql改版的网路研讨会。作为一个后端开发者,想必对mysql是非常是熟悉了。下面来聊一聊mysql8.0的新特性。
临时表的改进
在MySQL5.7中,所有的临时表都被创建在一个叫“ibtmp1”的表空间中。另外,临时表的元数据也将存储在内存中(不再存储在frm文件中)。
在MySQL8.0中,使用临时表存储引擎作为临时表(为优化JOIN、UNION等操作而创建的)存储的默认引擎,从而替换掉了原有的内存存储引擎。
新的引擎使得VARCHAR和VARBINARY列的存储更为高效(所有存储空间得到完全分配)。
持续的全局变量
MySQL8.0现在可以设置变量并使其改变持续到服务器重新启动。
使用此语法结合新的RESTART命令,可以非常容易的从shell中配置MySQL。这对云计算用户是一个十分友好的功能。
取消默认MyISAM系统表
由于采用了新的本地数据字典,现在我们不在需要MyISAM系统表了!
这些表和数据字典表现在都在一个名为mysql.idb的InNoDB表空间文件中。
这意味着如果你没有明确使用MyISAM表(为了你的数据,我们并不建议这样做),你可以创建一个没有任何MyISAM表的MySQL实例。
UNDO空间回收
在MySQL5.7中,我们已经可以截断UNDO空间了(设置innodb_undo_log_truncate,默认情况下禁用)。
在MySQL8中,我们改进了磁盘格式来使得每个UNDO表有大量的UNDO段。
此外,现在默认为两个单独的UNDO表空间(而非InnoDB系统表空间(最小为2,大小动态变化))中创建UNDO段。
我们不推荐使用innodb_undo_tablespaces来设置该值,因为我们将提供SQL命令让数据库管理员与UNDO表空间进行交互。
自动截断UNDO表空间默认启用。
UTF8性能改进
UTF8性能
由于默认的字符集已经从latin1改为utf8mb4,因此现在UTF8的速度要快得多,在特定查询时速度提高了1800%! Emojis现在无处不在,MySQL当然是选择支持他啦!??
取消Query Cache
我在性能审计中建议的第一件事就是禁用Query Cache,因为它给设计带来了很多麻烦。
MySQL QC造成的问题比它解决问题要多的多。因此我们决定在MySQL 8.0中取消它,因为大家就不应该使用它。
如果您的工作负载需要Query Cache,那么您应该改用ProxySQL替代Query Cache。
原子DDL
由于采用了新的数据字典,MySQL 8.0现在支持原子数据定义语句(原子DDL)。
这意味着当执行DDL时,数据字典更新,存储引擎操作以及二进制日志中的写入操作会合并到单个原子事务中,该事务要么完全执行,要么根本不执行。
这提高了DDL的稳定性保证未完成的DDL不会留下任何不完整的数据。
8.更快、性能更好的Schema和Information Schema
我们对Schema进行了许多改进,如假索引和直方图。
得益于假索引的存在,像SELECT * FROM sys.session这样的查询速度提高了30倍。
查询尽可能避免进行表扫描,并且索引的使用可大大缩短执行时间。
除此之外,Performance Schema还提供语句延迟的直方图。 新的直方图也使得优化器更为高效。
新的数据字典也使得Information Schema得到了改进,现在不需要大量的.frm表结构定义文件。
另外Information Schema现在支持扩展到超过1,000,000张表啦!
角色管理
MySQL 8.0中添加了SQL角色功能。 角色是指定的拥有特定权限的集合。 像用户帐户一样,角色可以拥有授予和撤消的权限。
角色可以默认或采用session修改。 也可强制设置角色。
加密表空间中的REDO日志和UNDO日志都将被加密
在MySQL 5.7中,可以为存储在每个表中的表加密InnoDB表空间。 在MySQL 8.0中,我们通过为UNDO和REDO日志添加加密来完成此功能。
除此以外,还有很多改进我没有列完。 还有很多其他不错的功能。 我想在下面再列出一些我认为重要的(尽管所有的改进都很重要??)
文末福利,关注我的公众号:
后台回复【视频】:免费获取100G学习视频
后台回复【书籍真多】:免费获取超1000册编程电子书资料
后台回复【提问】:资深程序员一对一对话