查询执行 & 处理模型

 

迭代器模型

对于基于磁盘的数据库来说,迭代器模型将能够在从个磁盘获取下一个元组之前,对前一个元组执行尽可能多的工作。

如果所有的数据都在内存中了,那么迭代器模型就没有什么优势了。因为会存在大量的函数调用,会造成巨大的开销。

物化模型

操作符一次性返回所有的元组。

缺点:

  • 没有办法控制输出,例如:想要限制一次只输出 10 个元组,这是不可能的。
  • 不适合 OLAP, 适合 OLTP

好处:

  • 执行的开销会变小,减少了函数的调用次数、跳转、分支等。

矢量化模型

像迭代器模型一样,每个操作符都会实现一个 next 函数,但不同的是,每一次 next,会返回一批元组。

计划执行方向

Top-to-Bottom(Pull)

从根节点开始,逐步向下执行,直到叶子节点。 元组总是又函数调用传递。

Bottom-to-Top(Push)

从叶子节点开始,逐步向上执行,直到根节点。

push_based 迭代器模型

并行执行

挑战

olap 具有瘫痪和不可并行化阶段

水平并行

垂直并行

单个查询的并行化