ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于公式计算优先次序的算法

关于公式计算优先次序的算法

原创 Linux操作系统 作者:shaozb 时间:2009-07-30 13:52:39 0 删除 编辑

      在进行自定义公式计算的算法设计中,有个问题困惑了很久,即:公式计算的优先次序。

      在进行公式的优先级排序过程中,如果存在循环公式,则优先级的最大级别不好确定。

      通过分析存贮计算公式的数据表可以看出,数据结构是按照Parent_wdm,wdm的树形逻辑组织的,如此,利用树形的固有特点,采用集合减的方法,最后解决了该问题。同时,对循环公式也给出了明确的答案。算法如下:

    LOOP
      BEGIN
        UPDATE GT_HZ_WDGS_ALL A
           SET A.GSJB = VN_J
         WHERE a.gsjb=1 and a.wdm in
               (SELECT Parent_wdm FROM GT_HZ_WDGS_ALL WHERE GSJB = 1
                MINUS
                SELECT wdm FROM GT_HZ_WDGS_ALL WHERE GSJB = 1);
        LS_FIND := SQL%ROWCOUNT;
        IF LS_FIND = 0 THEN
             -- 存在循环公式
             EXIT;
        END IF;
        VN_J := VN_J + 1;
      END;
    END LOOP;

该算法的优点是从树根逐层剥离计算元素直至树梢;缺点是要对公式表 GT_HZ_WDGS_ALL 进行3次全表扫描,2次排序,1次Hash Join。当公式表中记录达到百万级时,基本上要在临时表中完成排序的操作,处理时间大概9分钟。但是即便如此,该算法也远远高于原来的算法(原算法执行2小时)。同时,该算法的好处是当返回0记录时,如果表中尚存有未处理的记录,则全部是循环公式的内容。


 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16496023/viewspace-610840/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 优化报告
下一篇: 优化报告
请登录后发表评论 登录
全部评论

注册时间:2009-07-29

  • 博文量
    8
  • 访问量
    3584