[论文解读] Query shredding: Efficient relational evaluation of queries over nested multisets (extended version)
本文提出了一种新颖的查询拆分技术,能够高效地将嵌套多重集查询转换为固定数量的扁平SQL查询,同时保持多重集语义。通过利用规范化、索引化拆分以及延迟OLAP操作,该方法在中等规模数据库上的性能基准测试中优于先前的循环提升(loop-lifting)方法。
Nested relational query languages have been explored extensively, and underlie industrial language-integrated query systems such as Microsoft's LINQ. However, relational databases do not natively support nested collections in query results. This can lead to major performance problems: if programmers write queries that yield nested results, then such systems typically either fail or generate a large number of queries. We present a new approach to query shredding, which converts a query returning nested data to a fixed number of SQL queries. Our approach, in contrast to prior work, handles multiset semantics, and generates an idiomatic SQL:1999 query directly from a normal form for nested queries. We provide a detailed description of our translation and present experiments showing that it offers comparable or better performance than a recent alternative approach on a range of examples.
研究动机与目标
- 为解决LINQ和Ferry等语言集成查询系统中的性能瓶颈问题,这些系统中嵌套查询会导致查询风暴或低效的内存评估。
- 实现对多重集(bag)上嵌套查询的高效关系型评估,而先前的系统往往无法正确或高效地处理此类情况。
- 开发一种翻译管道,生成符合惯例且可优化的SQL:1999查询,且无需在翻译后依赖复杂的查询优化器。
- 在拆分过程中保持多重集语义,避免先前方法在处理嵌套多重集并集时出现的结果大小二次方膨胀问题。
提出的方法
- 该方法首先将嵌套查询规范化为高阶正规形式,消除高阶特性,从而支持模块化翻译。
- 拆分阶段将规范化后的查询分解为一组扁平SQL查询的拆分包,并通过外键链接标注各嵌套层级的索引。
- 引入let插入阶段,使用ROW_NUMBER和WITH子句引入SQL兼容的索引,将抽象索引表示为具体的扁平关系结构。
- 最终翻译阶段将拆分包映射为标准SQL:1999,扁平化记录并将行号操作直接嵌入查询计划中。
- 该方法将高级OLAP特性(如ROW_NUMBER)的使用推迟到最终SQL生成阶段,从而提升兼容性与优化潜力。
- 系统已实现并针对合成基准测试与循环提升方法进行了对比评估,使用标准SQL优化器,未引入额外的查询重写工具。
实验结果
研究问题
- RQ1能否在保持多重集语义的前提下,将嵌套多重集查询高效地转换为固定数量的扁平SQL查询?
- RQ2基于规范化的方案如何实现从嵌套查询到扁平关系形式的模块化、可组合翻译?
- RQ3将OLAP操作(如ROW_NUMBER)推迟到最终SQL阶段是否能提升性能并增强与标准SQL优化器的兼容性?
- RQ4在查询执行性能和结果大小方面,所提出的拆分方法与循环提升相比表现如何?
- RQ5该方法是否可推广至其他语言集成查询系统(如LINQ或Ferry)或复杂对象查询语言?
主要发现
- 所提出的拆分方法在大小达500MB的数据库上,对一系列合成基准查询的性能与循环提升相当或更优。
- 该方法保持了多重集语义,避免了先前方法在处理嵌套多重集并集时可能出现的结果大小二次方膨胀问题。
- 通过将OLAP操作推迟到最终SQL翻译阶段,该方法生成了更可预测且可优化的SQL执行计划,减少了对复杂后处理优化器的依赖。
- 该实现无需额外的查询重写工具(如Pathfinder)即可实现高效执行,而Ferry的循环提升方法则依赖此类工具。
- 该方法可扩展至基于列表的语义,尽管当前实现聚焦于与SQL默认行为匹配的多重集语义。
- 该方法与现有SQL:1999特性兼容,可轻松集成至LINQ或Ferry等系统,仅需极少修改。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。