Skip to content

Latest commit

 

History

History
33 lines (22 loc) · 2.28 KB

2.sql-layer-architecture.md

File metadata and controls

33 lines (22 loc) · 2.28 KB

4.1 SQL 层整体架构

OceanBase 和 MySQL 架构介绍

数据库领域经过长期的发展已经形成了比较稳定的工程结构,本节主要通过介绍 MySQL 和 OceanBase 的 SQL 层架构来帮助大家理解整个 SQL 内核层是如何组织的。如图所示左边借鉴《MySQL 45 讲》中关于 MySQL 的基本架构图,其中红框标注出来的是 SQL 层部分,右边是 OceanBase 处理一条 SQL 请求的架构图。

img

连接器部分本节不展开讲解,可以直接通过 MySQL 命令连接,也可以使用各种数据库连接工具(如 JDBC),连接器 OceanBase 高度兼容 MySQL 生态。

从图中可以看出 MySQL 在 SQL 层的处理模块分别是查询缓存、分析器、优化器和执行器。在 OceanBase 数据库的架构解析图中列出了较为详细的处理模块,并在图中用不同的颜色框,与 MySQL 的各模块一一对应。在接下几节中会按照右边图示,讲解一条 SQL 被发送给 Server 后从解析到执行的全过程。

SQL 语句结构

无论是经常使用数据库做查询,还是专门做数据库内核的同学,对一条 SQL 语句不同结构的执行顺序应该都有所了解。

SELECT <字段名> (9)
FROM <表名> (1)
JOIN <表名> (2)
ON <连接条件>(2)
WHERE <筛选条件>(3)
GROUP BY <字段名> (4)
HAVING <筛选条件> (5)
ORDER BY <字段名>(7)
LIMIT <限制行数>(8);

# 此处不包含 subquery

如上所示 SQL,其中标注出了执行序号,可以看到一条 SQL 语句的书写顺序与它的执行顺序通常都是不一样的,可能有些数据库的特定实现不一定按照这个顺序,但总体上都是比较类似的。感兴趣的同学可以查阅相关资料,了解为什么这样一条 SQL 的执行顺序是像示例中标注的这样,而不是其他顺序。也可以尝试打乱顺序,分析这样会对 SQL 执行造成什么样的影响。

Server 端是怎么一步步的去解析这条 SQL 的呢?实际上,SQL 是为了方便让使用者去向数据库 Server 端表达信息的一种描述性的语言,具体 Server 端怎么样处理,是在数据库内核层面去实现的。