一. 前言

本文主要介绍在Presto中部分与Sort(order by)相关的RBO优化。

二. MergeLimitWithSort规则

MergeLimitWithSort的作用主要将Limit + OrderBy 算子转化为TopN算子,如下图的执行计划所示:

MergeLimitWithSort的实现代码也非常简单,主要是将Limit+OrderBy的Node替换成TopN的Node即可。

三. MergeLimitOverProjectWithSort规则

MergeLimitOverProjectWithSort 的作用是将Limit-Project-Sort的算子转化成Project-TopN的算子的形式,如下所示:

MergeLimitOverProjectWithSort的代码实现过程主要通过将Project的Source替换成一个TopN Node,其中N为Limit的数量,排序列为Sort的排序列。

四. RemoveRedundantSort规则

RemoveRedundantSort 主要作用是去除只有1条结果或者0 条结果的Sort。如下执行计划中,order by 1是order by就只会有一条结果,因此Sort算子可以裁剪掉。

其代码实现过程如下所示:

public Result apply(SortNode node, Captures captures, Context context)
{// 如果sort的source无结果的话,则将整个执行计划都裁掉if (isAtMost(node.getSource(), context.getLookup(), 0)) {return Result.ofPlanNode(new ValuesNode(node.getId(), node.getOutputSymbols(), ImmutableList.of()));}// 如果只有一条结果的话,直接裁掉Sort算子if (isScalar(node.getSource(), context.getLookup())) {return Result.ofPlanNode(node.getSource());}return Result.empty();
}

五. PruneOrderByInAggregation规则

PruneOrderByInAggregation 主要作用是裁剪掉聚合函数内部的sort算子。如下执行计划所示,sum(id order by id)中的order by无意义,因此可以裁剪掉。

其代码实现的过程如下所示:

public Result apply(AggregationNode node, Captures captures, Context context)
{......for (Map.Entry<Symbol, Aggregation> entry : node.getAggregations().entrySet()) {Aggregation aggregation = entry.getValue();// 聚合操作中无sort操作,不做处理if (!aggregation.getOrderingScheme().isPresent()) {aggregations.put(entry);}// getAggregateFunctionImplementation can be expensive, so check it last.else if (metadata.getFunctionAndTypeManager().getAggregateFunctionImplementation(aggregation.getFunctionHandle()).isOrderSensitive()) {aggregations.put(entry);}// 聚合操作中无sort操作,裁剪掉sort算子else {anyRewritten = true;aggregations.put(entry.getKey(), new Aggregation(aggregation.getFunctionCall(),aggregation.getArguments(),aggregation.isDistinct(),aggregation.getFilter(),Optional.empty(),   // 裁剪sort算子的地方aggregation.getMask()));}}......
}

Presto RBO之 Sort算子优化相关推荐

  1. Presto RBO 之Limit 下推优化

    一. 引言 理论上讲,limit下推到越底层,上游吐出的数据就越少,计算效率就越高.因为,带有limit的计划执行树,在Presto中的RBO优化中,都尽可能将其推到底下执行.本文主要讲几个Prest ...

  2. Presto RBO之broadcast join与partitioned join类型的选择优化

    一. broadcast join和partitioned join的区别 broadcast与partitioned join的主要区别见: 优点 缺点 适用场景 broadcast join 内存 ...

  3. TVM darknet yolov3算子优化与量化代码的配置方法

    TVM darknet yolov3算子优化与量化代码的配置方法 使用以下接口函数  tvm.relay.optimize  quantize.quantize 实际代码: convert nnv ...

  4. GEMM与AutoKernel算子优化

    GEMM与AutoKernel算子优化 随着AI技术的快速发展,深度学习在各个领域得到了广泛应用.深度学习模型能否成功在终端落地应用,满足产品需求,一个关键的指标就是神经网络模型的推理性能.一大波算法 ...

  5. GEMM性能提升200倍,AutoKernel算子优化工具正式开源

    作者 | OPEN AI LAB 研究员 吕春莹 出品 | AI科技大本营 头图 | CSDN下载自视觉中国 随着AI技术的快速发展,深度学习在各个领域得到了广泛应用.深度学习模型能否成功在终端落地应 ...

  6. PostgreSQL 到底是基于规则优化(RBO)还是基于代价优化(CBO)的

    物理优化和逻辑优化是数据库查询优化的两个方面. 物理优化: 物理优化是指优化查询的物理执行计划,即如何访问磁盘.缓存以及如何进行排序等操作,以便最大化查询性能.物理优化涉及到磁盘 I/O.内存使用.排 ...

  7. Presto RBO 之 算子列裁剪

    一. 引言 RBO是SQL引擎中基于规则对用户输出的sql进行等价优化,是所有SQL引擎中性能优化中最为重要的一环.本文将浅述Presto的RBO优化代码中作者对算子输出进行列裁剪部分的理解. 二. ...

  8. Presto RBO 之LimitPushDown 代码走读

    一. 前言 presto中,RBO的规则有两种写法,一种是implements Rule(比如PushLimitThroughUnion等),一种是implements PlanOptimizer(比 ...

  9. AICompiler编译器介绍及访存密集算子优化

    简介:欢迎走进阿里云机器学习PAI AICompiler编译器系列.随着AI模型结构的快速演化,底层计算硬件的层出不穷,用户使用习惯的推陈出新,单纯基于手工优化来解决AI模型的性能和效率问题越来越容易 ...

最新文章

  1. 2022年全球及中国光纤馈通件行业发展建议与十四五规划动向展望报告
  2. java swt 菜鸟教程_编程基础学习JS的入门教程
  3. 用户、角色和权限,多表查询
  4. weblogic获取文件的路径问题
  5. 读人是基础,看人是关键,做人最重要
  6. MySQL 面试,必须掌握的 8 个知识点
  7. hudi的安装和使用
  8. 申万一级行业日指数_2017年申万一级行业分类表
  9. java实现Tomasulo算法_并行计算机组成与设计pdf
  10. find7刷Android,OPPO Find 7刷Color OS 2.0教程
  11. Linux(七)DNS域名解析服务器学习
  12. 【ONNX】使用 C++ 调用 ONNX 格式的 PyTorch 深度学习模型进行预测(Windows, C++, PyTorch, ONNX, Visual Studio, OpenCV)
  13. Windows下LATEX排版论文攻略—CTeX、JabRef使用心得, 包括 IEEEtran.bst
  14. 关闭Chrome浏览器的自动更新和升级提示
  15. 让你的 wowza 服务器提供 RESTful web 服务
  16. fm算法 c语言,推荐算法之—FM
  17. 一周快讯:乐视网市值蒸发349亿,钱宝网张小雷被逮
  18. 运维实战:DNS服务篇
  19. 罗密哦与朱丽叶----this指针、函数封装
  20. 国瀚实业|常见的家庭理财资产配置误区你知道吗

热门文章

  1. 昨晚涛哥直播秀了一把代码。。。
  2. 黑龙江省新一轮“双一流”建设名单公布,哈工大、哈工程、哈理工计算机科学与技术在列...
  3. 一款好用的服务器——优豆云
  4. vim/Linux常用命令
  5. 一位华为码农的讲述:我来自农村,我看到的真实现状(虐心)
  6. 银行借道发力聚合支付
  7. (转)英文学习资源站点
  8. python docx tables_pythondocx保留格式替换表格内容
  9. 大学c语言程序上机考试试题,C语言上机考试试题练习(2)
  10. 浅谈​一个与彼得原理和责任管理有关的小故事