ORCA优化器浅析——CXform base class for all transformations

news2024/11/25 10:29:29

CXform

CXforml类作为所有transformation的基础类,其包含了pattern成员m_pexpr。主要是在exploration和implementation expression流程中使用,主要调用Transform函数。其还包含返回相关xforms的集合函数,比如PbsIndexJoinXforms等。

class CXform : public CRefCount {
private:	CExpression *m_pexpr; // pattern	
	        CXform(CXform &); // private copy ctor

public:	
	explicit CXform(CExpression *pexpr); virtual ~CXform(); 
	CExpression *PexprPattern() const { return m_pexpr; } // accessor
	static BOOL FEqualIds(const CHAR *szIdOne, const CHAR *szIdTwo); // equality function over xform ids
	
	virtual EXformId Exfid() const = 0; // ident accessors	
	virtual const CHAR *SzId() const = 0; // return a string for xform name
	// the following functions check xform type	
	virtual BOOL FSubstitution() const { return false; } // is xform substitution?	
	virtual BOOL FExploration() const { return false; } // is xform exploration?	
	virtual BOOL FImplementation() const { return false; } // is xform implementation?
    virtual BOOL FCompatible(CXform::EXformId) { return true; } // check compatibility with another xform
	// actual transformation
	virtual void Transform(CXformContext *pxfctxt, CXformResult *pxfres, CExpression *pexpr) const = 0;
	// compute xform promise for a given expression handle
	virtual EXformPromise Exfp(CExpressionHandle &exprhdl) const = 0;
	// return true if xform should be applied only once.
	// for expression of type CPatternTree, in deep trees, the number
	// of expressions generated for group expression can be significantly
	// large causing the Xform to be applied many times. This can lead to
	// significantly long planning time, so such Xform should only be applied once
	virtual BOOL IsApplyOnce();

	// returns a set containing all xforms related to index join
	// caller takes ownership of the returned set
	static CBitSet *PbsIndexJoinXforms(CMemoryPool *mp);
	// returns a set containing all xforms related to bitmap indexes
	// caller takes ownership of the returned set
	static CBitSet *PbsBitmapIndexXforms(CMemoryPool *mp);
	// returns a set containing all xforms related to heterogeneous indexes
	// caller takes ownership of the returned set
	static CBitSet *PbsHeterogeneousIndexXforms(CMemoryPool *mp);
	// returns a set containing all xforms that generate a plan with a hash join
	// caller takes ownership of the returned set
	static CBitSet *PbsHashJoinXforms(CMemoryPool *mp);
	// returns a set containing xforms to use only the join order as available
	// in the query
	static CBitSet *PbsJoinOrderInQueryXforms(CMemoryPool *mp);
	// returns a set containing xforms to use combination of greedy xforms
	// for join order
	static CBitSet *PbsJoinOrderOnGreedyXforms(CMemoryPool *mp);
	// returns a set containing xforms to use for exhaustive join order
	static CBitSet *PbsJoinOrderOnExhaustiveXforms(CMemoryPool *mp);
	// returns a set containing xforms to use for exhaustive2 join order
	static CBitSet *PbsJoinOrderOnExhaustive2Xforms(CMemoryPool *mp);
};	// class CXform

CXformExploration和CXformImplementation

CXformExploration类作为Base class for all explorations,其定义如下所示:

class CXformExploration : public CXform {
private: CXformExploration(const CXformExploration &); // private copy ctor
public:	
	explicit CXformExploration(CExpression *pexpr); // ctor	
	virtual ~CXformExploration(); // dtor
	
	virtual BOOL FExploration() const { return true; } // type of operator
	// is transformation a subquery unnesting (Subquery To Apply) xform?
	virtual BOOL FSubqueryUnnesting() const { return false; }
	// is transformation an Apply decorrelation (Apply To Join) xform?
	virtual BOOL FApplyDecorrelating() const { return false; }
	// do stats need to be computed before applying xform?
	virtual BOOL FNeedsStats() const { return false; }
	// conversion function
	static CXformExploration *Pxformexp(CXform *pxform) {
		return dynamic_cast<CXformExploration *>(pxform);
	}

};	// class CXformExploration

CXformImplementation类作为base class for all implementations,其定义如下所示:

class CXformImplementation : public CXform {
private: CXformImplementation(const CXformImplementation &); // private copy ctor
public:	
	explicit CXformImplementation(CExpression *); // ctor	
	virtual ~CXformImplementation(); // dtor	
	virtual BOOL FImplementation() const { // type of operator
		return true;
	}

};	// class CXformImplementation

请添加图片描述

CLogicalEXformIdCXform subclassPhase
CLogicalAssertCXform::ExfImplementAssert
CLogicalBitmapTableGetCXform::ExfImplementBitmapTableGet
CLogicalConstTableGetCXform::ExfImplementConstTableGet
CLogicalCTEAnchorCXform::ExfCTEAnchor2Sequence、CXform::ExfCTEAnchor2TrivialSelect
CLogicalCTEConsumerCXform::ExfInlineCTEConsumer、CXform::ExfImplementCTEConsumer
CLogicalCTEProducerCXform::ExfImplementCTEProducer
CLogicalDeleteCXform::ExfDelete2DML
CLogicalDifferenceCXform::ExfDifference2LeftAntiSemiJoin
CLogicalDifferenceAllCXform::ExfDifferenceAll2LeftAntiSemiJoin
CLogicalDMLCXform::ExfImplementDML
CLogicalDynamicBitmapTableGetCXform::ExfImplementDynamicBitmapTableGet
CLogicalDynamicGetCXform::ExfDynamicGet2DynamicTableScan、CXform::ExfExpandDynamicGetWithExternalPartitions
CLogicalDynamicIndexGetCXform::ExfDynamicIndexGet2DynamicIndexScan
CLogicalExternalGetCXform::ExfExternalGet2ExternalScan
CLogicalFullOuterJoinCXform::ExfExpandFullOuterJoin、CXform::ExfImplementFullOuterMergeJoin
CLogicalGbAggCXform::ExfSimplifyGbAgg)、CXform::ExfGbAggWithMDQA2Join、CXform::ExfCollapseGbAgg、CXform::ExfPushGbBelowJoin、CXform::ExfPushGbBelowUnion、CXform::ExfPushGbBelowUnionAll、CXform::ExfSplitGbAgg、CXform::ExfSplitDQA、CXform::ExfGbAgg2Apply、CXform::ExfGbAgg2HashAgg、CXform::ExfGbAgg2StreamAgg、CXform::ExfGbAgg2ScalarAgg、CXform::ExfEagerAgg
CLogicalGbAggDeduplicateCXform::ExfPushGbDedupBelowJoin、CXform::ExfSplitGbAggDedup、CXform::ExfGbAggDedup2HashAggDedup、CXform::ExfGbAggDedup2StreamAggDedup
CLogicalGetCXform::ExfGet2TableScan
CLogicalIndexApplyCXform::ExfImplementIndexApply
CLogicalIndexGetCXform::ExfIndexGet2IndexScan、CXform::ExfIndexGet2IndexOnlyScan
CLogicalInnerApplyCXform::ExfInnerApply2InnerJoin、CXform::ExfInnerApply2InnerJoinNoCorrelations、CXform::ExfInnerApplyWithOuterKey2InnerJoin
CLogicalInnerCorrelatedApplyCXform::ExfImplementInnerCorrelatedApply
CLogicalInnerJoinCXform::ExfInnerJoin2NLJoin、CXform::ExfInnerJoin2HashJoin、CXform::ExfSubqJoin2Apply、CXform::ExfInnerJoin2PartialDynamicIndexGetApply、CXform::ExfInnerJoinWithInnerSelect2PartialDynamicIndexGetApply、CXform::ExfJoin2BitmapIndexGetApply、CXform::ExfJoin2IndexGetApply、CXform::ExfJoinCommutativity、CXform::ExfJoinAssociativity、CXform::ExfInnerJoinSemiJoinSwap、CXform::ExfInnerJoinAntiSemiJoinSwap、CXform::ExfInnerJoinAntiSemiJoinNotInSwap
CLogicalInsertCXform::ExfInsert2DML
CLogicalIntersectCXform::ExfIntersect2Join
CLogicalIntersectAllCXform::ExfIntersectAll2LeftSemiJoin
CLogicalLeftAntiSemiApplyCXform::ExfLeftAntiSemiApply2LeftAntiSemiJoin、CXform::ExfLeftAntiSemiApply2LeftAntiSemiJoinNoCorrelations
CLogicalLeftAntiSemiApplyNotInCXform::ExfLeftAntiSemiApplyNotIn2LeftAntiSemiJoinNotIn、CXform::ExfLeftAntiSemiApplyNotIn2LeftAntiSemiJoinNotInNoCorrelations
CLogicalLeftAntiSemiCorrelatedApplyCXform::ExfImplementLeftAntiSemiCorrelatedApply
CLogicalLeftAntiSemiCorrelatedApplyNotInCXform::ExfImplementLeftAntiSemiCorrelatedApplyNotIn
CLogicalLeftAntiSemiJoinCXform::ExfAntiSemiJoinAntiSemiJoinSwap、CXform::ExfAntiSemiJoinAntiSemiJoinNotInSwap、CXform::ExfAntiSemiJoinSemiJoinSwap、CXform::ExfAntiSemiJoinInnerJoinSwap、CXform::ExfLeftAntiSemiJoin2CrossProduct、CXform::ExfLeftAntiSemiJoin2NLJoin、CXform::ExfLeftAntiSemiJoin2HashJoin
CLogicalLeftAntiSemiJoinNotInCXform::ExfAntiSemiJoinNotInAntiSemiJoinNotInSwap、CXform::ExfAntiSemiJoinNotInAntiSemiJoinSwap、CXform::ExfAntiSemiJoinNotInSemiJoinSwap、CXform::ExfAntiSemiJoinNotInInnerJoinSwap、CXform::ExfLeftAntiSemiJoinNotIn2CrossProduct、CXform::ExfLeftAntiSemiJoinNotIn2NLJoinNotIn、CXform::ExfLeftAntiSemiJoinNotIn2HashJoinNotIn
CLogicalLeftOuterApplyCXform::ExfLeftOuterApply2LeftOuterJoin、CXform::ExfLeftOuterApply2LeftOuterJoinNoCorrelations
CLogicalLeftOuterCorrelatedApplyCXform::ExfImplementLeftOuterCorrelatedApply
CLogicalLeftOuterJoinCXform::ExfPushDownLeftOuterJoin、CXform::ExfSimplifyLeftOuterJoin、CXform::ExfLeftOuterJoin2NLJoin、CXform::ExfLeftOuterJoin2HashJoin、CXform::ExfLeftOuter2InnerUnionAllLeftAntiSemiJoin、CXform::ExfJoin2BitmapIndexGetApply、CXform::ExfJoin2IndexGetApply、CXform::ExfLeftJoin2RightJoin
CLogicalLeftSemiApplyCXform::ExfLeftSemiApply2LeftSemiJoin、CXform::ExfLeftSemiApplyWithExternalCorrs2InnerJoin、CXform::ExfLeftSemiApply2LeftSemiJoinNoCorrelations
CLogicalLeftSemiApplyInCXform::ExfLeftSemiApplyIn2LeftSemiJoin、CXform::ExfLeftSemiApplyInWithExternalCorrs2InnerJoin、CXform::ExfLeftSemiApplyIn2LeftSemiJoinNoCorrelations
CLogicalLeftSemiCorrelatedApplyCXform::ExfImplementLeftSemiCorrelatedApply
CLogicalLeftSemiCorrelatedApplyInCXform::ExfImplementLeftSemiCorrelatedApplyIn
CLogicalLeftSemiJoinCXform::ExfSemiJoinSemiJoinSwap、CXform::ExfSemiJoinAntiSemiJoinSwap、CXform::ExfSemiJoinAntiSemiJoinNotInSwap、CXform::ExfSemiJoinInnerJoinSwap、CXform::ExfLeftSemiJoin2InnerJoin、CXform::ExfLeftSemiJoin2InnerJoinUnderGb、CXform::ExfLeftSemiJoin2CrossProduct、CXform::ExfLeftSemiJoin2NLJoin、CXform::ExfLeftSemiJoin2HashJoin
CLogicalLimitCXform::ExfImplementLimit、CXform::ExfSplitLimit
CLogicalMaxOneRowCXform::ExfMaxOneRow2Assert
CLogicalMultiExternalGetCXform::ExfMultiExternalGet2MultiExternalScan
CLogicalNAryJoinCXform::ExfSubqNAryJoin2Apply、CXform::ExfExpandNAryJoin、CXform::ExfExpandNAryJoinMinCard、CXform::ExfExpandNAryJoinDP、CXform::ExfExpandNAryJoinGreedy、CXform::ExfExpandNAryJoinDPv2
CLogicalPartitionSelectorCXform::ExfImplementPartitionSelector
CLogicalProjectCXform::ExfSimplifyProjectWithSubquery、CXform::ExfProject2Apply、CXform::ExfProject2ComputeScalar、CXform::ExfCollapseProject
CLogicalRightOuterJoinCXform::ExfRightOuterJoin2HashJoin
CLogicalRowTriggerCXform::ExfImplementRowTrigger
CLogicalSelectCXform::ExfSelect2Apply、CXform::ExfRemoveSubqDistinct、CXform::ExfInlineCTEConsumerUnderSelect、CXform::ExfPushGbWithHavingBelowJoin、CXform::ExfSelect2IndexGet、CXform::ExfSelect2DynamicIndexGet、CXform::ExfSelect2PartialDynamicIndexGet、CXform::ExfSelect2BitmapBoolOp、CXform::ExfSelect2DynamicBitmapBoolOp、CXform::ExfSimplifySelectWithSubquery、CXform::ExfSelect2Filter
CLogicalSequenceCXform::ExfImplementSequence
CLogicalSequenceProjectCXform::ExfSequenceProject2Apply、CXform::ExfImplementSequenceProject
CLogicalSplitCXform::ExfImplementSplit
CLogicalTVFCXform::ExfUnnestTVF、CXform::ExfImplementTVF、CXform::ExfImplementTVFNoArgs
CLogicalUnionCXform::ExfUnion2UnionAll
CLogicalUnionAllCXform::ExfImplementUnionAll
CLogicalUpdateCXform::ExfUpdate2DML

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/874384.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Centos7多台服务器免密登录

准备四台服务器: docker0 docker1 docker2 docker3 在docker0服务器上生成公钥和私钥 [rootwww ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory /root/.ssh. Enter passp…

2023年03月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;字符长方形 给定一个字符&#xff0c;用它构造一个长为4个字符&#xff0c;宽为3个字符的长方形&#xff0c;可以参考样例输出。 时间限制&#xff1a;1000 内存限制&#xff1a;65536 输入 输入只有一行&#xff0c; 包含一个字符。 输出 该字符构成的长方形…

Mysql主从分离

一、前言 某个应用场景中&#xff0c;在操作数据库这部分&#xff0c;往往是数据库的读取往往大于数据库的写入&#xff0c;当读取数据达到数据库的瓶颈时&#xff0c;性能下滑&#xff0c;影响数据的写入&#xff0c;导致整个应用的不可用。为了解决这个问题&#xff0c;这时&…

java热插拔组件 SPI机制

文章目录 前言一、热插拔(spi机制)是什么&#xff1f;二、使用步骤1.利用java META-INF2.利用google spi3. 测试效果 总结 前言 在项目中,如果想要增加项目的灵活性,健壮性, 高逼格,那么你要对于java中的一些机制有了解; 例如: java中的spi机制spring中的spring.factories 等…

QtCreator ui设置界面 Layout 的属性 layoutStretch

layoutStretch 用于控制Layout在被用户进行缩放时。里面控件的缩放比例。如一个水平布局里面有两个控件 一个 QLineEdit 和 QPushButton。首先将两个控件的尺寸策列的水平策略都设置为Expanding。此时在将包含这两个控件的水平布局的 layoutStretch 进行如下设置。 运行程序就…

权衡与选择:如何巧妙管理项目需求的优先级

在项目管理领域&#xff0c;处理和管理需求可能是最具挑战性的环节之一。每一个项目都充满了各种需求&#xff0c;从业务需求到技术需求&#xff0c;从用户需求到系统需求。而如何有效地为这些需求排列优先级&#xff0c;不仅会影响项目的进度和资源分配&#xff0c;还会直接关…

Azure创建第一个虚拟机

首先&#xff0c;登录到 Azure 门户 (https://portal.azure.com/)。在 Azure 门户右上角&#xff0c;点击“虚拟机”按钮&#xff0c;并点击创建&#xff0c;创建Azure虚拟机。 在虚拟机创建页面中&#xff0c;选择所需的基本配置&#xff0c;包括虚拟机名称、操作系统类型和版…

threejs纹理的使用

实现地板的效果&#xff0c;需要导入3张图片&#xff0c;第一种样式&#xff0c;第二种&#xff0c;木板间的间隙&#xff0c;第三种&#xff0c;木板的粗细图片。先注册一个物体属性&#xff0c;在物体属性上加上图片&#xff0c;注册代码如下图&#xff1a; const floorMat …

乡村振兴指数与其30余个原始变量数据(2000-2022年)

乡村振兴是当下经济学研究的热点之一&#xff0c;对乡村振兴进行测度&#xff0c;是研究基础。测度乡村振兴水平的学术论文广泛发表在《数量经济技术经济研究》等顶刊上。整理了2000-2022年城市层面的乡村振兴指数与其30余个原始变量数据&#xff0c;供大家使用。 数据来源&…

大数据Flink(六十二):批处理的入门案例

文章目录 批处理的入门案例 一、示例 二、​​​​​​​开发步骤

Ae 效果:CC Environment

透视/CC Environment Perspective/CC Environment CC Environment&#xff08;CC 环境&#xff09;主要用于创建 3D 环境映射&#xff0c;可以将一个 2D 图像转换为 3D 空间的反射或折射。该效果通常用于模拟真实世界的全景相机镜头和环境反射。 在实际操作中&#xff0c;可将效…

阿里云服务器带宽计费模式怎么选?有什么区别?

阿里云服务器公网带宽计费模式按固定带宽和按使用流量哪个划算&#xff1f;阿里云百科以北京地域为例&#xff0c;按固定带宽计费1M带宽一个月23元&#xff0c;按使用流量计费1GB流量0.8元&#xff0c;如果云服务器带宽使用率低于10%&#xff0c;那么首选按使用流量计费&#x…

中国省级、城市-数字经济创新创业、分项指数(2010-2020年)

一、数据介绍 数据名称&#xff1a;中国省级、城市-数字经济创新创业、分项指数 数据年份&#xff1a;2010-2020年 数据范围&#xff1a;31省、336个城市 数据来源&#xff1a;北大企业大数据研究中心 二、参考文献 参考文献&#xff1a; 戴若尘,王艾昭,陈斌开.中国数字…

【C++】模拟实现map和set(用红黑树进行封装)

模拟实现map和set 前言正式开始简单框架data的比较迭代器operatoroperator-\-[ ]重载 前言 本篇以前一篇红黑树模拟实现插入功能为基础&#xff1a;【C】红黑树模拟实现插入功能(包含旋转和变色) 本篇中不会再讲解关于旋转和变色的知识。只是对于红黑树进行简单的封装。 如果…

java操作mongdb【超详细】

Java操作 搭建 搭建 依赖 <!--mongodb--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>配置文件 spring:data:mongodb:host…

opencv图片换背景色

#include <iostream> #include<opencv2/opencv.hpp> //引入头文件using namespace cv; //命名空间 using namespace std;//opencv这个机器视觉库&#xff0c;它提供了很多功能&#xff0c;都是以函数的形式提供给我们 //我们只需要会调用函数即可in…

烧写PYNQ镜像到SD卡

一&#xff0c;安装 Win32diskimager 首先将Micro SD卡插入读卡器的卡槽中&#xff0c;然后再将读卡器插入计算机USB接口&#xff0c;此时计算机将会识别到插入的可移动磁盘。双击打开Win32DiskImager-1.0.0.zip 压缩文件&#xff0c;里面win32diskimager-1.0.0-install.exe文…

ORCA优化器浅析——CDXLOperator Base class for operators in a DXL tree

如上图所示&#xff0c;CDXLOperator作为Base class for operators in a DXL tree&#xff0c;其子类CDXLLogical、CDXLScalar、CDXLPhysical作为逻辑节点、物理节点和Scalar节点的DXL表示类&#xff0c;因此其包含了这些类的共同部分特性&#xff0c;比如获取其DXL节点表示的函…

CNN之图像识别

文章目录 1. 图像识别1.1 模式识别1.2 图像识别的过程1.3 图像识别的应用 2. 深度学习发展2.1 深度学习为何崛起2.2 分类与检测2.3 常见的卷积神经网络 3. VGG3.1 VGG163.2 VGG16的结构&#xff1a;3.3 使用卷积层代替全连接3.4 1*1卷积的作用3.5 VGG16代码示例 4. 残差模型-Re…

ctfshow-web8

0x00 前言 CTF 加解密合集CTF Web合集 0x01 题目 0x02 Write Up 这道题实际上就是一个单纯的布尔型盲注&#xff0c;只不过是过滤了一些东西&#xff0c;一个是过滤的空格&#xff0c;还有一个是过滤了逗号 那么我们需要做的就是对这两个进行绕过&#xff0c;空格还是用/**…