MySQL 源码|96 - 优化器:多重等式谓词(MEP)|V20241204

目录文档:MySQL 源码|源码剖析文档目录

多重等式谓词(MEP)

在 SQL 的优化过程中,我们将 WHERE 子句中的条件、HAVING 子句中的条件以及 JOIN 子句中的条件称为 谓词(predicate)。优化器需要对谓词进行评估,以决定如何有效地进行查询。

为方便表述,我们在 MySQL 存在的各种 谓词 中,定义如下两个概念:

简单等式谓词(simple equality predicate) 简单等式谓词 包括以下两种 谓词

  • 字段与字段相等,即 field1 = field2,例如 a = bA.c = B.c
  • 字段与常量相等,即 field = constconst = field,例如 a = 1

行等式谓词(row equality predicate) 行等式谓词 是的等式两边分别是两行,即 (E1, ..., En) = (E'1, ..., E'n),例如 (1, 2, 3) = (2, 3, 4)

行等式谓词 中存在嵌套关系,显然不方便于计算,在优化过程中,需要将行的每一对元素拆分为一个 简单等式谓词。我们将这样一组相互之间为 AND 关系的 简单等式谓词 称为 常规联合等式

常规联合等式(conjunctive regular equality) 常规联合等式,是指由 AND 连接的一组 简单等式谓词,例如 a = b AND c = d AND e = f

然而,常规联合等式 中的 简单等式谓词 也无法充分表达出字段和常量相互之间的关系。例如,当查询条件为 a = b AND b = c AND c = 4 时,我们会得到 a = bb = cc = 4 这 3 个相互独立的 简单等式谓词,无法表示出其中隐含的 a = ca = 4b = 4 等条件,不便于选择索引和执行查询。

此时,我们需要引入 多重等式谓词,将 a = b AND b = c AND c = 4 转化为类似 a = b = c = 4 的形式,从而使其中隐含的等式条件可以被利用。

多重等式谓词(multiple equalities predicate, MEP) 多重等式谓词 写作 =(f1, ..., fn),表示其中的每个元素之间都是相等的,即等价于 f1 = f2 AND ... AND fn-1 = fn。在这些元素中,可以包含若干个字段以及零个或一个常量。

通过 多重等式谓词,我们可以将每一组等式条件合并到一起,从而方便索引选择和查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值