
MySQL 8.1 源码
文章平均质量分 92
抡着鼠标扛大旗
这个作者很懒,什么都没留下…
展开
-
【MySQL·8.0·源码】subquery 子查询处理分析(二)
在中,已经介绍了 MySQL 子查询的语法树形式,并简单介绍了非相关 scalar 子查询的一些处理流程,本文将继续介绍更多子查询的处理流程。本文后续以 “分析(一)” 来代替 “【MySQL·8.0·源码】subquery 子查询处理分析(一)”假如对子查询不做任何优化处理,那么子查询应该怎么执行呢?先来看一个 IN 子查询显然,先执行子查询,将 t2 的所有 pk 都查询出来,然后以所有的 pk 作为查询条件,检索 t1 中满足条件的记录返回即可。再来看一个 Exists 子查询。原创 2024-02-27 18:54:13 · 1298 阅读 · 2 评论 -
【MySQL·8.0·源码】subquery 子查询处理分析(一)
在 SQL 中,子查询属于 Nested Query 的一种形式,根据 Kim 的分类[1],Nested Query 即嵌套查询是一种 SQL-like 形式的查询语句嵌套在另一 SQL 中,SQL-like 的嵌套子句可以出现在 SELECT、FROM 和 WHERE 子句的任意位置。原创 2024-01-23 15:37:18 · 1330 阅读 · 0 评论 -
【MySQL·8.0·源码】MySQL 表的扫描方式
在进一步介绍 MySQL 优化器时,先来了解一下 MySQL 单表都有哪些扫描方式。单表扫描方法是基表的读取基础,也是完成表连接的基础,熟悉了基表的基本扫描方式,即可以倒推理解 MySQL 优化器层的诸多考量。基表,即数据库中的原始表,与之对应的是视图、物化临时表或其他形式的派生表(中间生成的)基表是直接存储实际数据的,在查询语法树中,一般叶子节点所对应的表为基表,MySQL 语法树大致结构可以参考MySQL 支持不同的存储引擎,以 InnoDB 举例,InnoDB 存储引擎采用的是。原创 2024-01-03 18:31:48 · 1566 阅读 · 0 评论 -
【MySQL·8.0·源码】MySQL 的查询处理
MySQL 的 Query 处理可以分为 Parse、Prepare(Resolve/Transform)、Optimize 和 Execute 几个阶段Parse词法扫描器将 SQL 语句字符串分解为 tokens,语法分析器将 tokens 组装成语法树的子树结构,并 Reduce 为基本查询结构,最终生成 SQL 语法解析数MySQL 语法解析树结构如PrepareOptimize代价评估,table access method 选择,最优 join order 选择。原创 2024-01-03 18:31:07 · 708 阅读 · 0 评论 -
【MySQL·8.0·源码】MySQL 语法树基础知识
我们都知道 SQL 语句经过时,识别扫描输入的 SQL 语句,将关键词、标识符、常量等分解转换成独立的 tokens,进一步在阶段根据语法规则检查 tokens 序列的结构并不断 shift 、reduce 构建成 SQL 语法解析树。在 MySQL 中,撇去解析树构建过程中的结构,最终生成语法树最重要的两个结构就是和对应用于描述查询表达式则对应用以描述查询规范或定义,表示一个SELECT主体部分,通常包括查询的各个组成部分,例如要选择的列、查询的表、过滤条件等。SQL 表达式可能是一条简单的。原创 2023-12-18 19:52:07 · 1992 阅读 · 0 评论 -
【MySQL·8.0·源码】MySQL 语法树结构
查询表达式由一个或多个查询块组成,多个查询块表示查询表达式有 UNION、INTERSECT、EXCEPT操作,或者利用查询块来描述子查询结构。从 LEX 可以定位到语法树中最外层的查询表达式和第一个查询块,也可以直接遍历所有的查询块。然后根据以上查询块和查询表达式的关系,从最外层的查询表达式的第一个查询块进行查询处理。查询表达式中的查询块形成一个树形结构,表达了嵌套形式的查询操作。一个查询块对应着一条基本的 SELECT 语句的语法结构。本文代码版本为:MySQL 8.1.0。原创 2023-12-18 13:04:04 · 1712 阅读 · 0 评论