浅谈Calcite的Calc优化
文章目录
- 背景
- 代码
- 测试
背景
最近询问了一下社区CSE相关的工作,社区反馈可以使用Calc。目前对这个不太了解,于是学习一下。
代码
- RelNode
Calc是一个接口,有一个实现是LogicalCalc。注释中提到了相关的优化规则。
- Rule
Calc相关的规则都收集在CALC_RULES中。
- Program
calc有一个专门的HepProgram
该program也被封装在standard的program中
standard会在Prepare被调用,这意味着Calcite执行query的单元测试可以使用了standard的program,也就是说有可能触发Calc相关的优化。
测试
在JdbcTest中编写下面的测试用例可以发现Calcite通过RexProgram支持了CSE
@Test void testCommonSubExpression() throws SQLException {CalciteAssert.hr().query("select \"salary\","+ "12 * \"salary\", "+ "3 * \"salary\", "+ "\"salary\" * 12 + \"salary\" * 3,"+ "\"salary\" * 3 + \"salary\" * 12 from \"hr\".\"emps\"").returns("");}
如下图所示:salary * 12 + salary * 3
和salary * 3 + salary * 12
都指向$t13
,可见Calcite提取CSE的时候支持简单的交换律
注意这里的conditionExpr为null,结合LogicalCalc的注视不难猜出Filter也有可能触发这种优化,而一起构建新的program。
另外,转完的SQL并无CSE的优化,就是说无法直接给其他引擎复用。
浅谈Calcite的Calc优化相关推荐
- 浅谈tomcat中间件的优化【转】
今天来总结一下tomcat的一些优化的方案,由于本人才疏学浅,写的不好,勿喷! tomcat对于大多数从事开发工作的童鞋应该不会很陌生,通常做为默认的开发环境来为大家服务,不过tomcat默认的一些配 ...
- 【浅谈DOM事件的优化】
浅谈DOM事件的优化 在 JavaScript 程序的开发中,经常会用到一些频繁触发的 DOM 事件,如 mousemove.resize,还有不是那么常用的鼠标滚轮事件:mousewheel (在 ...
- 你的驱动听话吗 浅谈ATI显卡驱动优化
你的驱动听话吗 浅谈ATI显卡驱动优化内容简介:对于显卡稍有了解的朋友一定不会陌生ATI显卡.昔日,ATI显卡凭借其优秀的视频回放能力和出色的着色渲染能力俘获众多DIY爱好者的心,甚至有网友将ATI的 ...
- 浅谈网站访问速度优化
周末女朋友公司的智慧医保项目上线了,但是web端访问速度比较慢,然后就来问问我有没有好的优化方案.于是就这篇[浅谈网站访问速度优化]就诞生了. 1.备案:好多个人网站为了方便,往往不喜欢备案,就把网站 ...
- 浅谈微博SEO搜索优化小技巧
[微博营销] 时下最热门的互动平台莫过于微博了,微博的火爆,为每天生活在互联网中的人提供了一个全新的社交模式.微博也正由于其良好的互动性及操作的简单性吸引了大量的用户聚集.面对如此庞大的市场,新浪.网 ...
- MYSQL优化浅谈,工具及优化点介绍,mysqldumpslow,pt-query-digest,explain等
MYSQL优化浅谈 msyql是开发常用的关系型数据库,快速.稳定.开源等优点就不说了. 个人认为,项目上线,标志着一个项目真正的开始.从运维,到反馈,到再分析,再版本迭代,再优化- 这是一个漫长且考 ...
- 浅谈Hive SQL的优化
目前团队的数据处理都在Hadoop集群上, 一是因为需要处理的数据量都是亿级的,这种规模的数据适合用Hadoop集群并行处理: 二是免除了分库分表给查询处理上带来的麻烦.Hive是基于Hadoop的一 ...
- 浅谈多重背包及其优化
模板来源:codevs 5429 根据背包问题的相关状态转移方程,我们不难写出朴素的算法 1 #include <iostream> 2 #include <cstdio> 3 ...
- mysql sql优化_浅谈mysql中sql优化
说到sql优化,一般有几个步骤呢,在网上看到了一篇很不错的帖子.在这分享一下吧,也是自己学习的一个过程. 一.查找慢查询 1.1.查看SQL执行频率 SHOW STATUS LIKE 'Com_%'; ...
最新文章
- 构建之法读书笔记之五
- python画直方图代码-python的pyecharts绘制各种图表详细(附代码)
- OpenGL通过Assimp加载模型
- golang语言变量定义、打印、占位符
- List和Set集合使用
- 计算2的N次方(信息学奥赛一本通-T1170)
- UDP套接字编程以及提高UDP可靠性的方法
- android 框架作用是什么意思,Android系统上的Xp框架有什么用
- 小米5手机刷成开发版获取root权限
- sysfader iexplore应用程序错误
- PowerVR开发工具和SDK 2020 Release 1发布啦!
- 又拍云php表单,又拍云php版Token授权防盗链整理 - YangJunwei
- 美团大众点评往届笔试面试题汇总
- PS导出灰度图到Unity内并生成地形
- 关于aop,AOP的应用场景?什么事AOP?
- Nacos百度网盘下载
- STM32的最小系统组成
- 解决验证码显示不了的方案
- python 形态学
- 如何看一篇文章的分数