The present invention relates to the field of database query optimization and discloses a method for the combined calculation of the output column, which comprises the following steps: S100, rewrite each output type: list of expressions in accordance with the exchange law operation and column ID rewrite for collection and expression of a column will eventually generate a unique the expression of S200, the output list; initialization expression: for each output list of, converted into two binary tree traversal for subsequent calculation, the current expression in table column sets and the expression depth; S300, sorted according to the final depth of each output column; sharing relationship expression between the markers S400 and output the column, which results in expression; S500, sharing relationship according to the expression step S400 generated in the output list, was located directly between Share the intermediate state. The invention ultimately reduces the use of CPU, thus improving the efficiency of the execution of the entire query plan.
【技术实现步骤摘要】
一种对输出列进行合并计算的方法
本专利技术涉及数据库查询优化领域,特别是涉及一种对输出列进行合并计算的方法。
技术介绍
目前,在数据库处理SQL的过程主要分为三个阶段:一、分析阶段:在这个阶段,数据库将来自客户端的标准结构化的查询语句(SQL),借助词法语法解析工具转换成数据库可以识别的数据结构——语法分析树。二、查询优化阶段:数据库在语法分析树上面施加各种优化的方法(也就是数据库中常见的查询改写),然后为参与连接的表计算出一条最优的访问路径,最终生成一个结构来表示最优的查询计划。三、执行查询计划阶段,执行最优的查询计划,最终获得结果。在查询优化阶段,会将谓词尽可能下推到底层的表,然后计算谓词的选择率,从而确定每个表的访问方法,最终使用动态规划算法最终获得一个最优的表的连接路径。这个连接路径基本上确定了整个查询计划。随着目前数据处理技术的不断变化,数据库中SQL也变成更加复杂,输出列的计算相应的占用了大量的CPU时间。因此有必要对输出列进行处理,以提高计算的效率。目前的数据库中,某些数据库已经实现了对下面场景的优化:假设SQL为SELECTSUM(X),AVG(X)FROMT1,在计算AVG(X)的时候,实际上是已经能获得SUM(X)的,因此可以省去计算SUM(X)。但是,对于更加复杂的情况,比如:SELECTSUM(X+Y),AVG((X+Y)*Z)FROMT1,目前的优化措施无法让两个表达式共享中间计算结果,因此会造成多次计算某些表达式而浪费了CPU资源。
技术实现思路
本专利技术针对现有技术中计算资源占有率大的缺点,提供了一种对输出列进行合并计算的方法。 ...
【技术保护点】
一种对输出列进行合并计算的方法,其特征在于,包括如下步骤:S100、改写各个输出列表达式:将运算表达式按照运算的交换律以及列的ID进行改写,使得对于一个列的集合和表达式最终能生成一个唯一的表达式;S200、初始化各个输出列表达式:对于各个输出列表达式,转换成二叉树进行后续遍历,计算当前表达式中出现的表中列的集合以及表达式的深度;S300、根据各个输出列的最终深度进行排序;S400、标记输出列之间的表达式共享关系,并将其结果存入表达式;S500、根据步骤S400生成的表达式共享关系,在输出列表达式之间直接设置中间状态的共享。
【技术特征摘要】
1.一种对输出列进行合并计算的方法,其特征在于,包括如下步骤:S100、改写各个输出列表达式:将运算表达式按照运算的交换律以及列的ID进行改写,使得对于一个列的集合和表达式最终能生成一个唯一的表达式;S200、初始化各个输出列表达式:对于各个输出列表达式,转换成二叉树进行后续遍历,计算当前表达式中出现的表中列的集合以及表达式的深度;S300、根据各个输出列的最终深度进行排序;S400、标记输出列之间的表达式共享关系,并将其结果存入表达式;S500、根据步骤S400生成的表达式共享关系,在输出列表达式之间直接设置中间状态的共享。2.根据权利要求1所述的一种对输出列进行合并计算的方法,其特征在于:步骤S400中,还包括:S410、初始化两个集合,一个集合是已处理的表达式的集合,一个是未处理的表达式的集合,将所有的输出列表达式放入未处理的表达式集合;S411、判断未处理的表达式集合是否为空...
【专利技术属性】
技术研发人员:余鹏,李建辉,熊中哲,魏兴华,臧冰凌,李春,陈栋,张文件,罗春,
申请(专利权)人:杭州沃趣科技股份有限公司,
类型:发明
国别省市:浙江,33
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。