连接定义点作用_最坏情况下最优连接(Worst-Case Optimal Joins)
所谓最坏情况下最优连接(Worst-Case Optimal Joins),是一项关于数据库中连接操作的最新技术。给定若干表{R1, R2, ..., Rn},在它们之上的多表连接所能得到结果的数量上限可以根据它们的连接所对应超图(hypergraph)的部分边覆盖(fractional edge cover)来确定。
所谓超图H=(V(H), E(H)),就是图中每条边可以有多个端点,而不再是常用的图定义中每条边只有两个端点。显然,超图是常用的图定义的泛化,所以在超图上满足的性质在常用的图定义上也满足。而所谓超图上的部分边覆盖(fractional edge cover)就是一个函数
表{R1, R2, ..., Rn}上的任意一个多表连接可以对应到一个超图H。具体而言,每个{R1, R2, ..., Rn}中表可以对应一个超图H中的边,而每个表中属性对应一个超图H中的点。然后,我们就可以有如下性质,表{R1, R2, ..., Rn}上的一个多表连接所能得到结果的数量|OUT|满足一下性质:
其中
子图匹配查询也可以视为多表连接的一种特例。在子图匹配查询中,每条边都是一个只有两列的表,多条边的子图对应多个两列表连接。
这个性质典型的例子就是下图这个三角形查询。这个查询中假设每条边都在图上能匹配图上N条边的话,那么这个查询所能得到结果的数量|OUT|上限为
图1. 三角形查询
上述结论其实是非常特别的。因为传统的多表连接都是将多表连接转化成二表连接的组合,所以上述的三角形查询的查询执行过程都会如下图所示。而下图所示的查询执行过程会导致
图2. 传统三角形查询执行计划
那三角形查询如何得到上述
通用连接(Generic Join)
所谓通用连接技术,给定一个查询的子图Q=(V(Q), E(Q)),它会首先确定一个查询点的顺序s=<
实现的过程中,查询点的顺序s基本都是保证对于任意小于|E(Q)|的k,<
具体到整个过程中,其中包含两个基本操作:Scan和Extend/Intersect。
Scan:对于查询点顺序s=<
Extend/Intersect(E/I):当我们得到的Qk-1匹配后,本文通过Extend/Intersect操作符计算Qk的匹配。对于任意一个Qk-1的匹配而言,每个与uk相邻的查询点的匹配沿着其邻接表出发得到uk可能的匹配,然后这些从不同的与uk相邻的查询点的匹配出发得到的匹配做交集,就能得到uk的匹配。
参考文献:
Amine Mhedhbi and Semih Salihoglu. 2019. Optimizing subgraph queries by combining binary and worst-case optimal joins. Proc. VLDB Endow. 12, 11 (July 2019), 1692–1704. DOI:https://doi.org/10.14778/3342263.3342643
连接定义点作用_最坏情况下最优连接(Worst-Case Optimal Joins)相关推荐
- Leapfrog Triejoin:最坏情况下的最优连接算法
介绍 leapfrog triejoin是商业数据记录系统 LogicBlox® 采用的一种新颖的连接算法,在不同的基准测试中表现出色.leapfrog triejoin论文的写作者认为这个算法,即使 ...
- java流处理为什么快_“任何情况下,都不可以堕胎”是道德普遍主义的观点。
[判断题]两个可能性之间可以彼此独立. [多选题]全球化正改变着我们的工作方式和生活方式,原因是我们首先必须处理( )和( )这两个问题. [判断题]"只许州官放火"体现了双重标准 ...
- 两个鸡蛋测试:从100层楼往下扔鸡蛋,求最坏情况下确认保证鸡蛋可以不破的最大楼层所需次数
最坏情况下求得最优解所需的次数 内容说明 本文是在看过<<妙解谷歌压箱底面试题:如何正确的从楼上抛鸡蛋>>一文以后做的总结,该文章对此问题描写的很详细,但是在拜读的过程中也花了 ...
- 下列各排序法中,最坏情况下的时间复杂度最低的是(**C** )A.希尔排序 B.快速排序 C.堆排序 D.冒泡排序
下列各排序法中,最坏情况下的时间复杂度最低的是(C ) 希尔排序 A.快速排序 B.堆排序 C.冒泡排序 D.正确答案:C 题目解析: 堆排序最坏情况时间下的时间复杂度为 O(nlog2n) :希尔排 ...
- 有一栋楼共100层,一个鸡蛋从第N层及以上的楼层落下来会摔破, 在第N层以下的楼层落下不会摔破。给你2个鸡蛋,设计方案找出N,并且保证在最坏情况下, 最小化鸡蛋下落的次数。
有一栋楼共100层,一个鸡蛋从第N层及以上的楼层落下来会摔破, 在第N层以下的楼层落下不会摔破.给你2个鸡蛋,设计方案找出N,并且保证在最坏情况下, 最小化鸡蛋下落的次数.(假设每次摔落时,如果没有摔 ...
- 设有6个有序表A、B、C、D、E、F,分别含有10、35、40、50、60和200个数据元素,各表中元素按升序排列。要求通过5次两两合并,将6个表最终合并成1个升序表,并在最坏情况下比较的总次数达到最
设有6个有序表A.B.C.D.E.F,分别含有10.35.40.50.60和200个数据元素,各表中元素按升序排列.要求通过5次两两合并,将6个表最终合并成1个升序表,并在最坏情况下比较的总次数达到最 ...
- 地面控制点的定义与作用_什么是地面塌陷
地 面 塌 陷 2020年1月13日,青海西宁市城中区一公交车站附近地面突然塌陷,一辆搭载乘客的公交车掉入坑中,致使9人遇难. 2019年12月12日,厦门吕厝路口地铁1号线和2号线外的配套物业开发项 ...
- 数据结构与算法 / 冒泡排序最坏情况下的时间复杂度解析
冒泡排序是一种用时间换空间的排序方法,最坏情况是把顺序的排列变成逆序,或者把逆序的数列变成顺序.在这种情况下,每一次比较都需要进行交换运算. 举个例子来说,一个数列 5 4 3 2 1 进行冒泡升序排 ...
- 类的组合在什么情况下使用_什么情况下选择使用圆锥滚子轴承?(原创轴承外贸写作素材)...
什么情况下选择使用圆锥滚子轴承?(轴承外贸写作素材) When should you choose to use tapered roller bearings? (Bearing foreign t ...
最新文章
- Hibernate Annotation 学习
- (Alex note) Create a oracle database
- 使用 python 的单人AI 扫雷游戏
- 为什么在 Verilog HDL 设计中一定要用同步而不能用异步时序逻辑?
- memcache 缓存的批量删除方案(转)
- C++基础——C++风格的类型转换(static_cast、const_cast、dynamic_cast、reinterpret_cast)
- Nginx源码阅读 ---- 模块的初始化过程,工作进程中初始化事件模块
- 值得关注:Ubuntu 14.04服务器版提供了虚拟化、自动化、存储相关更新
- 我们的后花园需要如何保护
- 超市管理系统软件测试用例图,超市管理系统用户管理模块测试用例集.doc
- STM8S系列Option Byte问题:AFx在STVP中显示Reserved无法配置
- 高考倒计时100天....99天
- 登录失败:用户帐户限制。可能的原因包括不允许空密码,登录时间限制,或强制的策略限制。...
- 微信 群相册服务器,微信也有群相册!用这个小程序,轻松优雅收集聚会合影...
- 浙江移动盒子魔和m401h 2+8G破解使用网络安装软件
- m277打印机 重置_惠普M277n说明书
- ubuntu18.04设置中文(简体)
- 【医学图像分割】读论文系列 1
- ModSecurity web application firewall (WAF) Research
- 温度传感器的c语言程序,DS18B20数字温度传感器C语言程序实例