sql查询优化与volcano Optimizer

Volcano Optimizer

简介:提供了一套sql解析与执行接口,包含sql查询和执行相关任务的执行代码,只需将数据模型插入到sql解析工具Calcite中,就可以得到SQL查询能力

SQL查询优化

  • 基于关系代数模型
  • 本质:对关系代数的优化
一、多个表根据共同点整合出特定列,通过只读取此列,高效读取,优化SQL查询
  • 只查找对应值所在区域,符合条件的数据匹配处理。避免独步不相关数据,极大减少IO和提高性能
关系代数进行查询优化的要点:
  1. SQL 查询可以表示成关系代数
  2. 关系代数作为一种树形的结构,实质上也可以表示查询的物理实现方案流程
  3. 关系代数可以进行局部的等价变换,变换前后返回的结果不变但执行的成本不同
  4. 通过寻找执行成本最低的关系代数表示,我们就可以将一个 SQL 查询优化成更为高效的方案
实现关系代数的化简和优化,依赖于数据系统的物理性质,如
  1. 储存设备的特性(顺序读性能如何?随机读性能如何?吞吐量如何)
  2. 储存内容的格式和排列(列式储存?行式储存?是否以某列进行分片?)
  3. 包含的元数据和预计算结果(是否存在索引?是否存在物化视图?)
  4. 聚合和计算单元的特性(单线程?并发计算?分布式计算?特殊加速硬件?)

二、SQL查询优化的基础算法

  • 结构匹配和替换
    • 先在关系代数结构上匹配局部结构,再根据机构特点进行其他操作(变换、替换)
  • 内部变换,但外部接口需要保持一致性
    • 向上输出的数据内容和类型不变
    • 下层接受输入的数量和类型不变
  • 基于成本的优化算法volcano Optimizer
    • 局部区域的计算成本和总成本成正比
  • 动态规划算法与等价集合
    • Calcite 采用了最简单的递归将子树的内容打印成字符串的方法进行 Hash 和比较。 因此在使用 Calcite 时要注意正确实现 RelNode 类的 getDigest 方法。保证将节点的各种属性包含在内, 防止不同的节点被认为等价
  • 广度优先搜索与启发式算法
    • 广度优先:自根节点起向下遍历执行搜索任务
    • Volcano Optimizer 支持三种算法终止条件
      • 时钟: 使用最大迭代计数或最大物理执行时间作为限制
      • 成本阈值: 当优化方案的成本低于某个阈值是结束算法(相比原始成本或固定值)
      • 规则穷尽: 当无法再应用规则获得新的关系代数结构的时候结束算法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值