暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

第 4 章:SQL 引擎 4.1 SQL 层整体架构

105

本章前 5 节主要介绍数据库 SQL 引擎基础,这部分内容大多数是数据库通用的知识,但也会结合 OceanBase 的实现进行讲解,来帮助大家理解。希望通过本章内容能让之前没有接触过 SQL 内核相关知识的同学对 SQL 引擎有一个整体的认识。

后几节的内容主要是在前几节的基础上,对 SQL 的优化与执行进一步拓展。


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 端怎么样处理,是在数据库内核层面去实现的。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论