MySQL 8.0是MySQL

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 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的不断发展和完善,相信其在数据库市场的份额将会越来越大。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
安全 关系型数据库 MySQL
轻松入门MySQL:MySQL8权限管理详解,角色和用户操作实例(18)
轻松入门MySQL:MySQL8权限管理详解,角色和用户操作实例(18)
1133 0
|
5月前
|
运维 关系型数据库 MySQL
MySQL8之mysql-community-debuginfo的作用
【7月更文挑战第10天】
69 6
|
2月前
|
存储 JSON 关系型数据库
MySQL 5.x和MySQL 8.x到底有什么区别?
本文详细对比了MySQL 5.x与MySQL 8.x的主要区别,包括存储引擎改进、性能提升、SQL语法增强(如窗口函数、CTE、JSON支持)、安全性和权限管理、并发及锁机制、InnoDB引擎增强、复制与高可用性等方面的显著差异。通过具体示例展示了8.x版本在企业级应用和高并发场景下的优越表现,建议有条件时尽早升级至MySQL 8.x以充分利用其新特性。
|
4月前
|
SQL 关系型数据库 MySQL
mysql8数据转移到mysql5
mysql8数据转移到mysql5
|
7月前
|
关系型数据库 MySQL 数据安全/隐私保护
Docker 安装 MySQL5.7 和 MySQL8
Docker 安装 MySQL5.7 和 MySQL8
348 0
|
7月前
|
关系型数据库 MySQL 数据库
使用阿里云的数据传输服务DTS(Data Transmission Service)进行MySQL 5.6到MySQL 8.0的迁移
【2月更文挑战第29天】使用阿里云的数据传输服务DTS(Data Transmission Service)进行MySQL 5.6到MySQL 8.0的迁移
347 2
|
关系型数据库 MySQL
|
关系型数据库 MySQL Java
想在Flink中使用MySQL 5或MySQL 8
想在Flink中使用MySQL 5或MySQL 8
99 1
|
关系型数据库 MySQL 数据库
Mysql8安装+重装的数据备份方法【提供Mysql8.0.27版本的压缩包】
Mysql8安装+重装的数据备份方法【提供Mysql8.0.27版本的压缩包】
251 0
Mysql8安装+重装的数据备份方法【提供Mysql8.0.27版本的压缩包】
mysql8和mysql5的安装过程都有!!!超多图超详细保姆级教程最新教程新手小白轻松上手,带你了解清楚你安装过程的每一个术语(四)
mysql8和mysql5的安装过程都有!!!超多图超详细保姆级教程最新教程新手小白轻松上手,带你了解清楚你安装过程的每一个术语
59 0