Skip to content

算法Algorithm

最坏情形最优连接

Worst-case optimal joins · WCOJ · AGM bound · 分数边覆盖界

用分数边覆盖证明集合连接的最大输出规模,并以三角形的重轻分解避免二元连接的巨大中间结果。

形式陈述 ​

全连接与分数边覆盖 ​

固定一个输出全部变量的合取查询。用有限属性集 V 和带索引的属性族 (ei)i∈I 表示它:V=⋃iei,每张输入表 Ri 是属性 ei 上的有限元组集合,大小为 Ni。这是超图的关联表示;即使两张表使用相同属性集,也保留不同的索引,不把两项约束合并。自然连接为

J={t 为 V 上的元组:t|ei∈Ri 对每个 i∈I}.

这里没有 NULL、重复计数或额外依赖约束。任何输入表为空时,直接返回空集。以下设 Ni≥1。一组非负权重 xi 是分数边覆盖,若每个属性收到的总权重至少为一:

xi≥0,∑i:v∈eixi≥1(v∈V).

AGM 界断言,对每个这样的覆盖,都有

|J|≤∏i∈INixi.

因此,令 U 为右端在全部分数覆盖上的最小值,便得到只依赖查询结构和各表大小的输出上界。求 U 等价于下列线性规划:

minx∑ixilog⁡Ni满足上述覆盖约束,U=exp(minx∑ixilog⁡Ni).

本页所有对数均为自然对数,熵也使用自然对数定义;exp 是其逆函数。大小不等时,目标不是无权的 ∑ixi。

“最坏情形最优”的量词 ​

连接算法若在固定查询下,以 O(∑iNi+U) 的时间完成预处理并枚举答案,就达到了按这些输入大小衡量的最坏情形保证。随机哈希实现的时间应理解为期望时间。其依据是:存在输入使输出本身已达到该界的查询相关常数倍,任何逐条输出算法都必须付出相应时间。它不表示算法在每一份具体实例上都最快,也不表示耗时总与实际输出 |J| 成正比。

一般查询的 NPRR 算法有显式查询因子的界;本页完整证明输出界,并完整实现三角形查询的算法。一般 NPRR 枚举过程见原文 §3.2,不把三角形的两分支规则当作任意超图的算法。

直觉

一张表约束它所涉及属性的联合取值。三角形查询中,每个属性被两张表约束,给每张表半份权重,便恰好覆盖每个属性一次。输出元组若很多,其联合不确定性就大;但每张输入表都限制了一部分不确定性,覆盖权重把这些限制合成为总输出的上界。

执行算法面临的是另一件事:先连接两张表,可能暂时枚举许多最终会被第三张表否决的组合。共享值的度数很大时,这一步尤其昂贵。重轻分解对高度数值改从第三张表出发,对低度数值才展开二元连接,从而把两种不同的枚举成本配平。

例子与边界

三角形的精确证书与达到上界的输入 ​

取

J=R(A,B)⋈S(B,C)⋈T(A,C),(|R|,|S|,|T|)=(r,s,t).

覆盖约束是 xR+xT≥1、xR+xS≥1、xS+xT≥1。三个整覆盖 (1,1,0),(1,0,1),(0,1,1) 与半覆盖 (1/2,1/2,1/2) 分别给出四个界,而且最优值恰为

U=min{rs,rt,st,rst}.

这不只是列出四个可行解。令 a=log⁡r,b=log⁡s,c=log⁡t。若 a≥b+c,任一覆盖的代价满足

axR+bxS+cxT≥b(xR+xS)+c(xR+xT)≥b+c,

整覆盖 (0,1,1) 达到它。另两个超长边情形同理。剩下的情形满足三角不等式;置

yA=(a+c−b)/2,yB=(a+b−c)/2,yC=(b+c−a)/2.

它们非负。将三个覆盖约束分别乘以 yA,yB,yC 再相加,任一可行代价至少为 (a+b+c)/2,而半覆盖达到它。这就穷尽了全部大小组合,包括某张表只有一行的边界。

令 X,Y,Z 都有 k 个值,取 R=X×Y,S=Y×Z,T=X×Z。三张表各有 N=k2 行,连接恰为 X×Y×Z,共有 k3=N3/2 行。因此等大输入的指数 3/2 不能降低。非平方或任意指定大小未必精确取等;一般 AGM 紧性结论允许一个仅依赖查询的常数因子。

三角形的重轻枚举 ​

令 R[b]={a:(a,b)∈R},S[b]={c:(b,c)∈S},记 dR(b)=|R[b]|。选阈值 τ>0,定义重值集合 D={b:dR(b)>τ}。以下伪代码使用集合成员索引,并按 B 分组;阈值可以是实数,直接与整数度数比较。

text
Triangle(R, S, T):
    if any input is empty: return
    build membership indexes for R, S, T
    group R and S by their B coordinate
    tau = sqrt(|R| * |T| / |S|)
    D = {b in keys(R): |R[b]| > tau}

    for b in D:                         # 重值:从第三张表出发
        for (a, c) in T:
            if (a, b) in R and (b, c) in S:
                emit (a, b, c)

    for b in keys(R) with b not in D:    # 轻值:展开受控的二元连接
        for a in R[b]:
            for c in S.get(b, empty):
                if (a, c) in T:
                    emit (a, b, c)

每个输出的 b 恰好属于一个分支。重分支遍历其必需的 T 元组再核验另外两项;轻分支直接枚举 R,S 的匹配再核验 T。因此既不漏报,也没有跨分支重复;集合输入保证每个分支内部同样不重复。

因为 |D|τ≤∑b∈DdR(b)≤r,重分支的候选数至多 rt/τ。轻分支的候选数满足

∑b∉DdR(b)|S[b]|≤τ∑b|S[b]|=τs.

取 τ=rt/s,两项分别至多 rst,合计至多 2rst。若要达到大小不等时的 U,先比较四个代价值:半覆盖最小时用以上算法;否则枚举相应两张表的笛卡尔积,检查共享坐标相等及第三张表的成员关系。后三种方法分别至多检查 rs,rt,st 个候选。无需把四种算法都运行一次。

16 行输入为什么产生 72 与 24 ​

在每张表的两个属性位置放入同一个对称星形关系

E={(0,i),(i,0):1≤i≤8},R=S=T=E.

每张表有 16 行。先做任意一对二元连接时,共享值 0 产生 8⋅8=64 个元组,八个叶值各产生一个,共 72 个。最终答案却为空:星形图没有三角形;具体地,两步路径的两端要么都是叶子,要么都是 0,都不属于第三张表。

重轻算法取 τ=16=4,唯一重值是 0。重分支枚举 D×T 的 16 个候选;每个轻值只有一条 R 记录与一条 S 记录,轻分支共枚举 8 个。总共 24 个候选,最后全部拒绝。一个候选可能执行两次成员查询,这个数不是哈希探测总数。

把 8 换成 k,三张表大小 N=2k,任意第一步二元连接都有 k2+k=Θ(N2) 行,最终仍为空。当 k>2 时,阈值 2k 仍把中心单独列为重值,这个分解只产生 2k+k=3k 个候选。于是差距随着规模增长,不只是一次 72 与 24 的数值比较。这说明仅选定二元连接次序、物化其中间结果不能保证三角形的 O(N3/2) 界;它没有排除额外使用半连接、索引或多路过滤的执行器。

集合、投影与约束的边界 ​

若每张表包含同一匹配二元组的 N 份副本,bag 连接有 N3 个输出出现次数。集合 AGM 界约束的是不同完整元组,不能套在这个重复次数上。若查询投影掉部分变量,完整见证的数量仍受本页界约束,但可能远大于去重后的答案数,因此这里没有证明投影查询按实际答案规模最优。

键约束、函数依赖或已知度数分布会缩小允许实例的范围,可能给出更强的界。AGM 使用的只是表大小和属性覆盖;上面的无三角形星形实例也表明,它通常不是单个实例的精确输出预测。

推论与应用

用条件熵证明一般 AGM 界 ​

若 J 为空,结论立即成立。否则从 J 中均匀抽一个完整元组 XV,于是 H(XV)=log⁡|J|。按某个固定次序把属性写成 v1,…,vn,记 X<j=(Xv1,…,Xvj−1)。使用条件熵的链式法则与“增加条件平均不增熵”,对每个 ei 有

H(Xei)=∑j:vj∈eiH(Xvj∣Xei∩{v1,…,vj−1})≥∑j:vj∈eiH(Xvj∣X<j).

乘以非负的 xi 后求和,换序并使用覆盖约束,得到

∑ixiH(Xei)≥∑j=1n(∑i:vj∈eixi)H(Xvj∣X<j)≥∑j=1nH(Xvj∣X<j)=H(XV).

第二步用到了离散条件熵非负。另一方面,Xei 的支持集包含在 Ri 中,故 H(Xei)≤log⁡Ni。合并便有 log⁡|J|≤∑ixilog⁡Ni,取指数即得 AGM 界。边缘分布既不需要均匀,也不需要互相独立;均匀性只用于最初选取完整答案。

运行时间实际包含什么 ​

三角形算法读取、分组并建立哈希表索引,预处理的期望时间与空间都是 O(r+s+t)。假设属性值及固定长度元组可用常数个机器字表示,哈希与相等比较为常数成本,并维持适当负载因子,每个候选的成员检查具有期望 O(1) 成本。因此选择最佳证书后的总期望时间为

O(r+s+t+U).

答案可以流式输出,额外工作空间为 O(r+s+t);若保存全部答案,还须加上输出空间。长字符串的读写与比较、外存 I/O,以及比较树索引带来的对数因子,都不在这个单位成本哈希模型中。

固定查询的结构常数不能在查询也增长时隐去。NPRR 原文 Theorem 3.2 给出的一般界为 O(mnU+n2∑iNi+m2n),其中 m 是关系数、n 是属性数。这是枚举保证,与合取查询的联合成员判定 NP 完全、固定查询成员判定的数据复杂度结论回答不同的问题。

参考资料
  • Albert Atserias、Martin Grohe、Dániel Marx,Size Bounds and Query Plans for Relational Joins,arXiv 上传版本,§3 Lemmas 2–4(PDF pp. 6–8)给出分数覆盖界;§4.1 Theorem 10(PDF pp. 11–12)给出指定关系大小时相差至多查询相关因子的紧性。
  • Hung Q. Ngo、Ely Porat、Christopher Ré、Atri Rudra,Worst-case Optimal Join Algorithms,PODS 2012,§3.1 Example 2:三角形的重轻分解;§3.2 Theorem 3.2、Remark 3.3:一般运行时间与预处理假设。
  • Hung Q. Ngo,Worst-case Optimal Join Algorithms 讲义,PDF pp. 3、16、24–25、40:最坏情形最优的含义、三角形界与熵证明。在线版本访问于 2026-10-03,文件未注明授课日期。
关系图谱10 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系