MySQL 5.7中,所有内部临时表都是在名为“ibtmp1”的惟一共享表空间中创建的。此外,临时表的元数据也将存储在内存中(不再存储在.frm文件中)。
在MySQL 8.0中,内部临时表默认使用memory存储引擎(由优化器在JOIN,UNION,…期间创建的表)的引擎,这个新引擎为VARCHAR和VARBINARY列提供了更高效的存储(内存容量最大分配模式)。
MySQL 5.7中只有ibtmp文件,临时表的数据和undo都在该类文件中,临时表的session断开后其空间不会自动回收。

临时表数据文件
SHOW VARIABLES LIKE '%innodb_temp_tablespaces_dir%';也即#innodb_tmp
临时表undo文件
SHOW VARIABLES LIKE '%innodb_temp_data_file_path%';也即ibtmp1
session断开后,其存放数据的临时表数据文件空间会被自动回收。

全局变量持久化
借助MySQL 8.0,可以设置变量并可以永久性保留。我写了一篇专门的博客文章,您可以查看更多信息。将此语法与新的RESTART命令结合使用,可以非常轻松地从其shell配置MySQL。这是一个云友好功能
不再有MyISAM系统表
有了新的本地数据字典,我们将不再需要MyISAM系统表!这些表和数据字典表现在在数据目录中的一个名为mysql.idb的InnoDB表空间文件中创建。
这意味着,如果您不显式使用MyISAM表(如果您关心数据,则完全不建议这样做),则可以拥有一个没有任何MyISAM表的MySQL实例。
大事务的UNDO表空间收缩
在MySQL 5.7中,我们已经添加了截断撤消空间的可能性(innodb_undo_log_truncate,默认情况下禁用)。
在MySQL8中,我们更改了undo磁盘格式以支持每个undo表空间大量回滚段。同样,默认情况下,现在在两个单独的undo表空间中创建了回滚段,而不是在InnoDB系统表空间中创建了(最小为2,并且可以动态设置)。
innodb_undo_tablespaces变量已经被弃用,因为我们将提供SQL命令,为DBA提供与UNDO表空间进行交互的真实接口。默认情况下,现在也启用了undo表空间的自动截断功能。
UTF8字符集的性能
默认字符集已从latin1更改为utf8mb4,因为UTF8在特定查询上的速度现在快得多,快了1800% !
现在Emojis字符无处不在,MySQL支持他们没有问题!
Query Cache的移除
在性能审计期间,我一直建议的第一件事是禁用查询缓存,因为它不是按设计进行伸缩的。MySQL Query Cache产生的问题比解决的问题还多,我们决定在MySQL 8.0中删除它,因为没有人应该使用它。
如果您的工作负载需要查询缓存,那么您应该查看一下proxysql作为查询缓存的情况。
原子DDL
使用新的数据字典,MySQL 8.0现在支持原子数据定义语句(原子ddl)。
这意味着,当执行DDL时,数据字典更新、存储引擎操作和二进制日志中的写操作被合并到一个原子事务中,该事务要么完全执行,要么完全不执行。
这提供了更好的可靠性,未完成的ddl不会留下任何不完整的数据。
更快、更完整的Performance Schema(直方图、索引、…)和Information Schema
对Performance Schema进行了许多改进,例如伪索引或直方图。
借助伪索引,诸如SELECT * FROM sys.session之类的查询速度提高了30倍。现在,尽可能避免进行表扫描,索引的使用大大缩短了执行时间。
除此之外,Performance Schema还提供语句延迟的直方图。优化器还可以从这些新的直方图中受益。
Performance Schema还通过使用数据字典得到了改进。无需更多.frm文件即可了解表的定义。而且这允许扩展到超过1,000,000个表!
ROLES(角色)
MySQL 8.0中已经添加了SQL角色。角色是一个命名的特权集合。
与用户帐户一样,角色可以拥有授予和撤消的特权。角色可以是默认的,也可以是会话的。也可以将角色设置为强制的。
如果表空间被加密,那么redo log和undo log将被加密
在MySQL 5.7中,可以为存储在每个表的文件中的表加密一个InnoDB表空间。
在MySQL 8.0中,我们通过为UNDO和REDO日志添加加密来完成这个功能。另外,改进的列表并没有在这里结束。还有许多其他不错的功能。我想下面列出一些其他重要的(即使他们都是重要的当然)
自增id列的持久化,persistent auto increment
Innodb自我优化,InnoDB self tuning
Json字段类型性能提升,JSON performance
不可见索引,Invisible Indexes
新的备份锁,new lock for backup
资源组,Resource Groups
binlog中的额外元数据,additional metadata into binary logs
社区版的OpenSSL支持,OpenSSL for Community Edition too
!!更新!!
随着我们不断改进MySQL 8.0的发行版,还有另一个原因需要升级到MySQL 8.0,这可能是必须处理大型表时最需要的功能之一。
开发人员将不再害怕在其架构中添加列,并且DBA / 运维将不会害怕运行它们,或者将不需要使用第三方工具来执行此(过去)复杂的任务:即时添加列!
InnoDB即时添加列
借助新的数据字典,现在可以执行元数据更改并直接在表的末尾添加新列,而无需重建它!这是每次开发人员想要向表中添加列时,alter语句都阻塞所有session的终结者。
而这仅仅是即时ddl之旅的开始。