傲世皇朝-广告设计-注册登录测速一站式服务平台
傲世皇朝-广告设计-注册登录测速一站式服务平台
新闻详情
 
当前位置
全网首发:{杏运注册平台}挂机软件解析
作者:an888    发布于:2025-12-13 10:55    文字:【】【】【

  A 这种等价但是形式不一致的情况。还有字符串类型的参数,严格要求大小写保持一致

  (IV)公共子条件具有幂等性。由于破坏幂等性的前提是条件的参数中包含一些类似 RAND(), NOW()等函数,因此这里要求公共子条件中参数只能为Item_field或者Item_basic_constant类型。

  整个提取公共子条件的函数为extract_common_cond,输入的为谓词条件

  3)两个条件都有3个子条件,所以需要比较9次,决定两个子条件是否相等的功能函数名为check_valid_common_cond,此函数会对比子条件的所有参数,由于条件中可能有嵌套条件,所以该函数为了避免过大开销,则规定嵌套的深度不能超过2层。比较函数check_valid_common_cond亦是递归的,为了处理嵌套条件的情况。

  4)经过比较后会得到一个公共的子条件,显然只有t1.i=t4.i和t2.i=t4.i属于公共子条件,所以得到的公共子条件列表只包含两个条件 ,这样便返回到extract_common_cond函数

  5)根据4)中得到的公共子条件列表可以重建一个新的(Item_cond_and *)类型,如下所示

  7) 将新的条件和前面得到的重建条件连接在一起则得到了一个全新的条件,其结构如下所示

  8) 最后需要根据7)中得到的新条件进行递归处理,即再调用extract_common_cond对新的条件进行处理,但是为了性能考虑,同样需要对递归深度做一个限制,即不能超过1层。但是新的条件中前两个子条件都是(Item_func_eq *)类型,只有最后一个子条件可以满足(cond1) or (cond2)的模式。最后一个子条件由于没有公共子条件所以直接返回,得到最终的结果。

  等值传播是对连接限制和条件中相等的部分组成一个等价类,这样可以生成多种连接限制,从而为连接顺序的优化提供更多的空间

  等值传播寻找一个连接条件和限制条件的公共子集,从而可以修改连接的限制,从而让连接优化有更多的可能性

  1)首先解析的是where condition中的条件,调用子函数build_equal_items_for_cond对其进行解析,传入的条件为t1.a=t2.a,因为这个条件没有嵌套也没有多个相等关系,所以只需要解析一层,如果传入的条件含有多层或有多个等价条件则需要递归调用build_equal_items_for_cond。对谓词条件的等价类建立还需要考虑一种特殊情况:常量item,这一过程将在下个例子进行解释。输入类型为Item_func_eq的条件此时被转换为类型Item_equal的新条件并进入下一步。

  2)1)中返回了谓词条件中的等价条件,接下来需要回到build_equal_items建立全局的等价类cond_equal,首先需要判断返回的等价条件是多个等价条件还是单独的等价条件,本例中只是一个相等条件。将其加入cond_equal,然后将cond_equal的层次关系设置好进入下一步,由于这是顶层的build_equal_items函数所以其上层等价类为空。

  3)接下来处理join条件,首先遍历获得join的表中含的条件,在这一过程中需要调用table-join_cond_optim()判断是否含有连接条件,然后递归调用build_equal_items函数,在此次调用过程中需要传递1)和2)中得到的等价条件类 {t1.a, t2.a}作为连接条件的等价类的上层。

  4) 其中只有一个table_list附加了条件,其结构如下。顶层是一个and条件,然后t1.a=t3.a和t2.a=t4.a分别为其两个子节点,此时继续递归调用build_equal_items和build_equal_items_for_cond进行等值传递并建立连接条件的等价条件类。连接条件的等价条件类的上层等价条件类是(1)中谓词条件给出的等价条件类。

  最终会返回一个Item_cond_and的类型,只包含单个Item_equal条件,其中包含t1.at3.at2.at4.a4个item_field然后将其设置为新的join条件,为后续的优化提供更多的空间。其结构如下所示。

  对于不同种类型的item默认不相等,而对于t2.i=t2.i这种条件也不认为是等值条件,这个冗余条件将在常数传播和零散条件去除中被优化。

  等值传播中第二个例子输出的item经过常数传播后会消除冗余的t2.i,傲世皇朝挂机软件下载,将它们传播为128, 其函数为propagate_cond_constants。常数传播的目的在于消除冗余的变量。

  2) 首先处理的是128 = t2.1, 此条件中含有常量,所以可以根据此条件进行常数传播,即调用change_cond_ref_to_const函数进行传播,将所有的t2.1转换为128

  3)change_cond_ref_to_const输入两个参数field 和 value 分别对应是 t2.1 和 128,然后根据这两个参数对所有对条件进行优化,第一个处理对条件是128 = t2.1,由于此条件和传入的参数完全一样,所以不做任何变形直接返回

  5) 最后处理的条件是类型为Item_equal的t1.i = 128,由于这已经是个等价类型,所以不需要进行任何传播,直接返回上层。

  6) 接下来回到2)中遍历所有的条件,此时得到了传播后的条件t2.1 = 128,但是此条件被标记为被常数传播处理过,所以不能作为常数条件进行传播。最后的等价条件是一个Item_func::MULT_EQUAL_FUNC不能作为一个传播的条件,所以直接返回, 此时item结构为

  7) 4)中save_list中含有一个COND_CMP类型,其中含有t2.1 = 128的条件,所以下一流程是将此条件传播到所有的条件中,从而进一步消除t2.i这一变量, 与2)到5)中的流程类似,change_cond_ref_to_const函数将所有的条件优化,其中只有第一个条件128 = t2.1可以被优化为128 = 128, 其他条件都无法优化。所以我们得到了这一传播的最终结果如下所示。

  这一函数主要是一些特殊情况的优化,故名思意是零散条件去除,没有统一的优化理论。本文无法覆盖所有的情形,所以只能粗略概括一下这些优化,亦作抛砖引玉之意

  主要的调用函数为internal_remove_eq_conds, 此函数亦为递归调用的函数,对谓词条件中的每个条件进行处理,以去除满足以下规则的冗余条件

  128=128足够简单故可以被提前计算,计算结果返回为true,故设置结果类型为Item::COND_TRUE,此条件可以被去除,所以变换为

  -本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。

相关推荐
  • 林洋能源申请基于多约束优化与预测模型的采集任务并行调度方法专利更高效执行数据采集
  • 全网首发:{杏运注册平台}挂机软件解析
  • {鹿鼎}专用的{注册登录}方案
  • {星空注册}用户真实评价汇总
  • 科大智能申请电网分布式电源自适应协同控制方法专利实现场景识别驱动、分布式协同优化与边缘自治执行的统一控制流程
  • 首页-天狮注册-首页
  • 长安-平台注册!
  • {傲世皇朝注册}平台登录:高手必备
  • {新航}{新航注册}操作细节
  • 28平台 注册登录首页"
  • 脚注信息