10 个数据库管理员必知的 MySQL 8.0 新功能

file

今天,让我们看一下 MySQL8.0 提升数据库管理员工作效率的十大改进。

从一大堆特性中找出十点并不太容易,以下是前十名的特性:

  1. 临时表的改进
  2. 持续的全局变量
  3. 取消默认 MyISAM 系统表
  4. UNDO 空间回收
  5. UTF8 性能改进
  6. 取消 Query Cache
  7. 原子 DDLs
  8. 更快、性能更好的 Schema (直方图,索引,...) 和 Information Schema
  9. 角色管理
  10. 加密表空间中的 REDO 和 UNDO 日志都将被加密

临时表的改进

在 MySQL5.7 中,所有的临时表都被创建在一个叫 「ibtmp1」 的表空间中。另外,临时表的元数据也将存储在内存中(不在存储在 frm 文件中)。

在 MySQL 8.0 中,MEMORY 存储引擎也将被 Temp Table 存储引擎  替代为内部临时表(为优化JOIN、UNION等操作而创建的)的默认 引擎。 这个新引擎为 VARCHAR 和 VARBINARY 列提供更高效的存储空间 (所有存储空间得到完全分配)。

持续的全局变量

MySQL 8.0 现在可以设置变量并使其改变持续到服务器重启。我写了一个  博客  你可以查看更多信息。

结合这个新的  RESTART  命令,可以非常容易地从其 shell 中配置 MySQL 。

取消默认的 MyISAM 系统表

由于采用了新的本地数据字典,现在我们不再需要 MyISAM 系统表了! 这些表和数据字典都表现在一个名为  mysql.idbInnoDB  表空间文件中。 这意味着如果你没有明确使用 MyISAM 表 (为了你的数据,我们并不建议这样做),你可以创建一个没有任何 MyISAM 表的 MySQL 实例。

UNDO 空间回收

在 MySQL 5.7 中,我们已经可以截断 undo 空间了 (设置 innodb_undo_log_truncate,默认情况下禁用)。在 MySQL8 中,我们改进了磁盘格式来使每个 undo 表拥有大量的 undo 段。此外, 现在默认为两个单独的 undo 表空间 (而非 InnoDB 系统表空间,最小为2,大小动态变化) 中创建 undo 字段。 我们不推荐使用 (innodb_undo_tablespaces) 来设置该值,因为我们将提供 SQL 命令来让数据库管理员与 undo 表空间进行交互。

自动截断 undo 表空间默认启用.

UTF8 性能改进

由于默认字符集已经从  latin1  改为  utf8mb4 ,因此现在的 UTF8 的速度要快得多 ! 在特定查询时速度提高了1800%!Emoijis 现在无所不在,MySQL 当然选择支持他啦! ?

取消 Query Cache

现在性能审计中第一件事就是禁用 Query Cache ,因为他给数据库设计带来很多麻烦。 MySQL QC 造成的问题比他解决问题要多得多。 因此我们决定在 MySQL 8.0 中取消他,因为大家就不应该使用它。 如果你工作中需要使用 Query Cache,你应该用  ProxySQL as Query Cache 替代 Query Cache。

原子 DDLs

由于采用了新的数据字典, MySQL 8.0 现在支持原子数据定义语句 (Atomic DDLs)。 这意味着执行 DDL 时,数据字典更新,存储引擎操作以及二进制日志文件中的写入操作会合并到单个原子事务中,该事务要么完全执行,要么根本不执行。这提高了 DDL 的稳定性保证未完成的 DDL 不会留下任何不完整的数据。

更快、性能更好的模式 (直方图,索引, ...) 和信息模式

我们对 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 日志增加加密来完成此功能。

除此之外, 还有很多改进没有列出来。 还有很多不错的功能。我想在下面列出一些我认为重要的 (尽管所有改进都挺重要的 ?  )

  1. 持久自动增量
  2. InnoDB 自动校正
  3. JSON 性能优化
  4. 隐形索引
  5. 新的备份锁
  6. 资源组功能
  7. 额外的二进制日志元数据
  8. 以及 OpenSSL for Community Edition
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:http://lefred.be/content/top-10-mysql-8-...

译文地址:https://learnku.com/laravel/t/10638/10-m...

本帖已被设为精华帖!
本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!