摘要:
mysql的查询优化器和查询执行器采用了经典的火山模型, 从mysql5.0开始一直到mysql8.0都保持了火山模型.
这么做有其自身的考虑, 火山模型是一个非常经典的模型, 但是其他一些列数据库的优化方向倒是从摒弃火山模型转而使用物化模型而进行.
本文做一些反思.
反思:
- 对火山模型最具有突破性改变的是monetdb https://www.cidrdb.org/cidr2005/papers/P19.pdf
- 如果对于火山模型的理解上, 最为简单的倒是duckdb的 standalone-plan 的例子, 对于语法树, 逻辑节点,物理节点, 操作符或者说算子operator, 都有十分经典的描述
- 火山模型这个名字到底是怎么起的暂且先不提, 其特点倒是十分的鲜明:
- 将操作符抽象成一棵树
- 从跟节点不断的调用子节点做执行Next
- 在数据流上来说, 倒是一次next获取一行数据
- 这点最被物化模型诟病
- 一次获取一行数据, 破坏了CPU的cache, 预处理的pipeline
- 物化模型提出的解决方案倒是十分的直接, 专门针对CPU的预执行机制, 一次不再处理一个,而是处理一块连续的空间,