MySQL 8.0是MySQL

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: MySQL 8.0是MySQL发展的一个重要里程碑。在这个版本中,MySQL Server层的整体架构得到了质的飞跃,通过持续每三个月的迭代和重构工作,使得MySQL在性能和功能上都有了显著的提升。本文将基于MySQL 8.0.25源码,详细介绍MySQL 8.0的最新架构和一些重要的变化。

MySQL 8.0是MySQL发展的一个重要里程碑。在这个版本中,MySQL Server层的整体架构得到了质的飞跃,通过持续每三个月的迭代和重构工作,使得MySQL在性能和功能上都有了显著的提升。本文将基于MySQL 8.0.25源码,详细介绍MySQL 8.0的最新架构和一些重要的变化。

背景与架构

在过去,我们对MySQL的理解主要建立在5.6和5.7版本之上,更多的是对比PostgreSQL或者传统数据库。然而,从MySQL 8.0开始,通过持续的迭代和重构,MySQL Server层的整体架构有了质的飞越。MySQL 8.0的架构与其他数据库并没有太大的区别,而MySQL现在更多的是加强InnoDB、NDB集群和RAPID(HeatWave clusters)内存集群架构的演进。本文将更偏向于从优化器、执行器的流程角度来演进。

MySQL解析器(Parser)

在MySQL 8.0中,官方使用Bison进行了重写,生成Parser Tree,同时Parser Tree会通过contextualize函数生成MySQL抽象语法树(Abstract Syntax Tree)。MySQL抽象语法树和其他数据库有些不同,是由比较让人拗口的SELECT_LEX_UNIT/SELECT_LEX类交替构成的,然而这两个结构在最新的版本中已经重命名成标准的SELECT_LEX -> Query_block和SELECT_LEX_UNIT -> Query_expression。

MySQL准备/重写阶段

在解析和转换过程中,需要经过一系列的步骤。这些步骤按功能分而非完全按照执行顺序,主要包括:

Setup and Fix:设置和修复过程,包括设置表 leaves、解析 derived table、设置自然连接的行类型等。

Resolve and Transform:解析和转换过程,包括解析 WHERE 条件、设置 GROUP BY 列表、解析 ORDER BY 列表等。

Window::setup_windows1:设置窗口。

setup_order_final:设置 ORDER BY 子句。

setup_ftfuncs:设置全文函数。

Transformation

转换阶段包括以下几个主要步骤:

remove_redundant_subquery_clause:移除冗余子查询。

remove_base_options:移除 SELECT_DISTINCT 选项。

resolve_subquery:解析子查询。

Convert subquery predicate into semi-join, or Mark the subquery for execution using materialization, or Perform IN->EXISTS transformation, or Perform more/less ALL/ANY -> MIN/MAX rewrite:将子查询转换为半连接,或者将子查询标记为使用 materialization 执行,或者执行 IN->EXISTS 转换,或者执行更多的 ALL/ANY -> MIN/MAX 重写。

Substitute trivial scalar-context subquery with its value:用子查询的值替换简单的标量上下文子查询。

transform_scalar_subqueries_to_join_with_derived:将 eligible scalar subqueries 转换为 derived tables。

flatten_subqueries:将 semi-join subquery predicates 转换为 semi-join join nests。

apply_local_transforms:应用本地转换,包括删除未使用的合并列、简化连接等。

Window::eliminate_unused_objects:消除未使用的窗口定义、冗余排序等。

结论

MySQL 8.0的Server层架构在多个方面进行了优化和升级,包括解析器、准备/重写阶段以及转换阶段等。这些优化和升级使得MySQL 8.0在性能和功能上都有了显著的提升,为用户提供了更好的使用体验。随着MySQL 8.0的不断发展和完善,相信其在数据库市场的份额将会越来越大。

相关实践学习
自建数据库迁移到云数据库
本场景将引导您将网站的自建数据库平滑迁移至云数据库RDS。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
安全 关系型数据库 MySQL
轻松入门MySQL:MySQL8权限管理详解,角色和用户操作实例(18)
轻松入门MySQL:MySQL8权限管理详解,角色和用户操作实例(18)
1764 0
|
运维 关系型数据库 MySQL
MySQL8之mysql-community-debuginfo的作用
【7月更文挑战第10天】
299 6
|
12月前
|
SQL Oracle 关系型数据库
在MySQL Shell里 重启MySQL 8.4实例
在MySQL Shell里 重启MySQL 8.4实例
414 2
|
关系型数据库 MySQL Linux
升级到MySQL 8.4,MySQL启动报错:io_setup() failed with EAGAIN
当MySQL 8.4启动时报错“io_setup() failed with EAGAIN”时,通常是由于系统AIO资源不足所致。通过增加AIO上下文数量、调整MySQL配置、优化系统资源或升级内核版本,可以有效解决这一问题。上述解决方案详细且实用,能够帮助管理员快速定位并处理此类问题,确保数据库系统的正常运行。
526 9
|
关系型数据库 MySQL
|
存储 JSON 关系型数据库
MySQL 5.x和MySQL 8.x到底有什么区别?
本文详细对比了MySQL 5.x与MySQL 8.x的主要区别,包括存储引擎改进、性能提升、SQL语法增强(如窗口函数、CTE、JSON支持)、安全性和权限管理、并发及锁机制、InnoDB引擎增强、复制与高可用性等方面的显著差异。通过具体示例展示了8.x版本在企业级应用和高并发场景下的优越表现,建议有条件时尽早升级至MySQL 8.x以充分利用其新特性。
|
SQL 关系型数据库 MySQL
mysql8数据转移到mysql5
mysql8数据转移到mysql5
311 0
|
关系型数据库 MySQL 数据安全/隐私保护
Docker 安装 MySQL5.7 和 MySQL8
Docker 安装 MySQL5.7 和 MySQL8
1101 0
|
关系型数据库 MySQL 数据库
使用阿里云的数据传输服务DTS(Data Transmission Service)进行MySQL 5.6到MySQL 8.0的迁移
【2月更文挑战第29天】使用阿里云的数据传输服务DTS(Data Transmission Service)进行MySQL 5.6到MySQL 8.0的迁移
622 2
|
关系型数据库 MySQL Java
想在Flink中使用MySQL 5或MySQL 8
想在Flink中使用MySQL 5或MySQL 8
311 1

推荐镜像

更多