SQL 引擎的解剖结构

主要观点:Dolt 采用 go-mysql-server 已五年,本文总结其当前状态,从解析到结果暂存展示查询的历程。
关键信息

  • 包含 SQL 引擎的七个步骤(解析、绑定、计划简化、连接探索、计划成本计算、执行、暂存结果)及多种执行策略和基础设施层。
  • 解析采用左递归的 Yacc 语法,易执行但调试难;绑定将 AST 节点转换为特定计划节点。
  • 有多种计划简化规则,如子查询去相关/应用连接等;类型强制从执行转移到绑定。
  • 连接搜索有回溯和动态规划两种策略,功能依赖分析可优化大连接。
  • 连接成本计算考虑模式、表键分布等,确定最优执行策略。
  • 执行需将计划转换为可执行格式,注意相关查询的动态构造。
  • IO/暂存涉及不同数据格式转换及缓冲管理。
    重要细节
  • 解析时通过字节到标记再到 AST 节点的过程,右递归解析易理解调试难,左递归则相反。
  • 绑定阶段类似编程语言变量定义引用,有多种对象的命名空间规则。
  • 计划简化规则标准且变化少,常通过模式匹配和重排实现。
  • 连接搜索策略各有优缺点,DP-Sube 冲突检测器能达到更多重排。
  • 功能依赖分析利用星型模式连接优化大连接。
  • 执行时需将逻辑标识符转换为索引访问,注意非物化迭代器和相关查询的处理。
  • IO/暂存中不同数据格式转换及缓冲管理的细节。
阅读 9
0 条评论