查询执行操作符
查询执行操作符是数据库引擎将扫描、选择、投影、排序、聚合和连接等物理算法组合成执行计划并运行以生成查询结果的组件。
用 PaperMind 寻找选题即将推出Find papers & topics
Tools & resources
Learn & explore
视频即将推出
Definition
查询执行操作符是关系代数操作在元组流上的算法实现;操作符被组合成一个树或流水线,执行时计算查询结果。
Scope
本主题涵盖查询引擎的物理操作符及其执行组织方式:迭代器(打开-下一个-关闭)模型、流水线与物化、表和索引扫描、选择和投影、外部归并排序、分组和聚合以及重复消除。它讨论了操作符如何消费和生成元组流,以及内存和I/O如何影响其成本。它不包括连接算法的具体细节和选择操作符的优化器,这些是相关主题。
Core questions
- 迭代器(打开-下一个-关闭)模型如何让操作符组合成流水线?
- 结果何时进行流水线处理,何时物化到磁盘?
- 选择、投影和重复消除如何在物理上实现?
- 外部归并排序如何处理大于内存的数据?
- 内存预算和I/O成本如何影响操作符性能?
Key concepts
- 迭代器/打开-下一个-关闭模型
- 表和索引扫描
- 选择和投影操作符
- 外部归并排序
- 基于哈希的分组
- 聚合操作符
- 重复消除
- 流水线与物化
Key theories
- 迭代器(Volcano)模型
- 每个操作符都公开打开、下一个和关闭方法,并按需从其子节点拉取元组;这种统一接口允许任意操作符组合成流水线,是大多数查询引擎的基础。
- 流水线与物化
- 流水线操作符直接将元组传递给其父节点,而不写入中间结果,从而节省I/O,而排序等阻塞操作符必须在生成输出之前物化其输入;优化器平衡两者。
- 外部排序和聚合
- 当数据超出内存时,外部归并排序和基于哈希的分组通过对磁盘进行多趟处理;这些算法是ORDER BY、GROUP BY、重复消除和排序-合并连接的基础。
Clinical relevance
执行操作符是查询计划的估计成本变为实际运行时间的地方:操作符的选择和实现,以及它们如何有效利用内存并避免不必要的磁盘I/O,决定了数据库服务的每个查询的吞吐量和延迟。
History
迭代器模型在Graefe的Volcano查询评估框架及其1993年查询评估技术综述中得以明确,该综述编目了关系引擎使用的物理操作符。该模型的统一接口使可扩展、可组合的查询引擎变得实用并保持标准,后续工作增加了向量化和编译执行以提高效率。
Key figures
- Goetz Graefe
- Jeffrey D. Ullman
Related topics
Seminal works
- graefe1993
- garciamolina2008
Frequently asked questions
- 什么是迭代器模型?
- 它是一种设计,其中每个物理操作符都实现相同的接口——通常是打开、下一个和关闭——并在其父节点调用下一个时一次生成一个元组。由于所有操作符共享此接口,它们可以被插入到任意计划树中,并且元组按需向上流经树。
- 为什么有些操作符被称为阻塞操作符?
- 阻塞操作符在消耗完所有输入之前无法生成任何输出——排序和某些聚合就是例子,因为最终结果取决于每个输入元组。阻塞操作符必须物化其输入,而选择等流水线操作符可以随处理随发出结果。