为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8.1
【操作系统】:win10
【CPU】:intel
【问题描述】*:达梦对UNION ALL的支持是不是有性能瓶颈?UNION ALL比较多的时候一个简单的查询select xmid from CW_YWHZBLC where guid='7C074DCDFCEB49C6B64C0A1572790184'都会执行10s以上,但在oracle中可以在1s内执行完。具体的CW_YWHZBLC代码如下:
CREATE OR REPLACE VIEW "GDCWYTH0409"."CW_YWHZBLC"
AS
select "SRLX", "SFXZGWK", "SFJSFS", "ZDR","CZR","BXLX","CZRQ","SAASDM","SQYWID","YWMC","SSZT","GUID","DJBH","XMID","ZJE","TABLE_NAME","PROCINSTID","SHZT","SHRQ","SQR","ACT_STATUS","SFDG","SFDSZF","FYMC","DJ","SFZC","SFGHN","SFLYSB","SFFP","SFKYXMJX" from (
select '' AS SRLX, sfxzgwk,'yes' as SFJSFS, rc.zdr as zdr, rc.czr as czr,'bx' as bxlx,to_char(rc.czrq,'yyyy-MM-dd') as czrq, rc.saasdm, rc.sqspguid as sqywid , '日常业务支付'as ywmc ,rc.sszt,rc.guid,rc.djbh,rc.xmmc as xmid,to_number(rc.bxzje) as zje,'CW_RCBXZB' as table_name,rc.procinstid,rc.shzt,to_char(rc.czrq,'yyyy') shrq,rc.bxr as sqr,rc.act_status,rc.sfdgzf AS sfdg,rc.Sfdszf AS SFDSZF,mx.fymc AS fymc,rc.dj as dj,rc.sfzc as sfzc,rc.sfghn as sfghn,rc.sflysb as sflysb,''AS sffp,''AS sfkyxmjx from CW_RCBXZB rc left join cw_rcbxmxb mx on rc.guid=mx.zbid
union all
select '' AS SRLX, sfxzgwk,'yes' as SFJSFS,gw.zdr as zdr,gw.czr as czr, 'bx' as bxlx,to_char(gw.czrq,'yyyy-MM-dd') as czrq, gw.saasdm, gw1.sqspbh as sqywid , '公务接待支付'as ywmc ,gw.sszt,gw.guid,gw.djbh,gw.xmid,to_number(gw.bxje) as zje,'CW_GWJDFBXZB' as table_name,gw.procinstid,gw.shzt,to_char(gw.czrq,'yyyy')shrq,gw.bxryid as sqr,act_status,gw.sfdgzf AS sfdg,gw.sfdszf AS SFDSZF,gw.xzfyid AS fymc,''as dj,''as sfzc,''as sfghn,''as sflysb ,''AS sffp,''AS sfkyxmjx from CW_GWJDFBXZB gw left join CW_GWJDBXDZB gw1 on gw.guid = gw1.bxbh
union all
select '' AS SRLX, sfxzgwk,'yes' as SFJSFS,jk.zdr as zdr,jk.czr as czr,'bx' as bxlx,to_char(jk.jksj,'yyyy-MM-dd') as czrq, jk.saasdm,jk.sqjkid as sqywid, '借款业务支付'as ywmc ,jk.sszt,jk.guid,jk.djbh,m.jfbh as xmid,to_number(jk.jkzje) as zje,'CW_JKYWB' as table_name,jk.procinstid,jk.shzt,to_char(jk.jksj,'yyyy')shrq,jk.jkr as sqr,act_status,jk.sfdgzf AS sfdg,jk.sfdszf AS SFDSZF,m.fymc AS fymc,''as dj,''as sfzc,''as sfghn,''as sflysb,''AS sffp,''AS sfkyxmjx from CW_JKYWB jk left join CW_JKYWB_MXB m on m.jkid=jk.guid
union all
select '' AS SRLX, sfxzgwk,'yes' as SFJSFS,cl.zdr as zdr,cl.czr as czr,'bx' as bxlx,to_char(to_date(cl.czrq,'yyyy-MM-dd'),'yyyy-MM-dd') as czrq,cl.saasdm,cl.ccywguid as sqywid, '出差业务支付'as ywmc ,cl.sszt,cl.guid,cl.djbh,cl.xmmc as xmid,to_number(cl.bxzje) as zje,'CW_CLFBXZB' as table_name,cl.procinstid,cl.shzt,to_char(to_date(cl.czrq,'yyyy-MM-dd'),'yyyy')shrq,cl.sqr as sqr,act_status,cl.sfdgzf AS sfdg,cl.sfdszf AS SFDSZF,xm.fymc AS fymc,''as dj,''as sfzc,''as sfghn,''as sflysb,''AS sffp,''AS sfkyxmjx from CW_CLFBXZB cl left join CW_CLFBXXMB xm on cl.guid=xm.zbid
union all
select '' AS SRLX, sfxzgwk,'' as SFJSFS,''as zdr,cc.czr as czr, 'sq' as bxlx,to_char(cc.czrq,'yyyy-MM-dd') as czrq, cc.saasdm ,''as sqywid , '出差业务事前'as ywmc ,cc.sszt,cc.guid,cc.djbh,cc.jfbh as xmid,(select to_number(sum(bcbxje)) from CW_CCSQSPB_XM where CCSQID = cc.guid ) as zje,'CW_CCSQSPB' as table_name,cc.procinstid,cc.shzt,to_char(cc.czrq,'yyyy')shrq,cc.sqr as sqr,act_status,'' AS sfdg,'' AS SFDSZF,'' AS fymc,''as dj,''as sfzc,''as sfghn,''as sflysb,''AS sffp,''AS sfkyxmjx from CW_CCSQSPB cc
union all
select '' AS SRLX, sfxzgwk,'' as SFJSFS,''as zdr,de.czr as czr, 'sq' as bxlx,to_char(de.czrq,'yyyy-MM-dd') as czrq, de.saasdm, ''as sqywid , '大额资金业务'as ywmc ,de.sszt,de.guid,de.djbh,de.jfbh ,to_number(de.jfys) as zje,'CW_DEZJKJRH' as table_name,de.procinstid,de.shzt,to_char(de.czrq,'yyyy')shrq,de.sqr as sqr,act_status,'' AS sfdg,'' AS SFDSZF,'' AS fymc,''as dj,''as sfzc,''as sfghn,''as sflysb,''AS sffp,''AS sfkyxmjx from CW_DEZJKJRH de
union all
select '' AS SRLX, sfxzgwk, '' as SFJSFS, ''as zdr,gwsp.czr as czr,'sq' as bxlx,to_char(to_date(gwsp.sqrq,'yyyy-MM-dd'),'yyyy-MM-dd') as czrq,gwsp.saasdm,''as sqywid , '公务接待事前'as ywmc ,gwsp.sszt,gwsp.guid,gwsp.djbh,gwsp.xmid,to_number(gwsp.nsyje) as zje,'CW_GWJDYWSQSPB' as table_name,gwsp.procinstid,gwsp.shzt,to_char(to_date(gwsp.sqrq,'yyyy-MM-dd'),'yyyy')shrq,gwsp.sqr as sqr,act_status,'' AS sfdg,'' AS SFDSZF,'' AS fymc,''as dj,''as sfzc,''as sfghn,''as sflysb,''AS sffp,''AS sfkyxmjx from CW_GWJDYWSQSPB gwsp
union all
select '' AS SRLX, sfxzgwk,'' as SFJSFS,''as zdr,jk.jbr as czr,'sq' as bxlx,to_char(jk.jksj,'yyyy-MM-dd') as czrq,jk.saasdm, ''as sqywid , '借款业务事前'as ywmc ,jk.sszt,jk.guid,jk.djbh, xmid,to_number(jk.jkzje) as zje,'CW_JKSQYWB' as table_name,jk.procinstid,jk.shzt,to_char(jk.jksj,'yyyy')shrq,jk.jkr as sqr,act_status,'' AS sfdg,'' AS SFDSZF,'' AS fymc,''as dj,''as sfzc,''as sfghn,''as sflysb,''AS sffp,''AS sfkyxmjx from CW_JKSQYWB jk
union all
select '' AS SRLX, sfxzgwk, '' as SFJSFS,sr.zdr as zdr,sr.jbr as czr, 'bx' as bxlx,to_char(sr.lrsj,'yyyy-MM-dd') as czrq,sr.saasdm,''as sqywid , '个人收入支付'as ywmc ,sr.sszt,sr.guid,sr.FFLSH, xmbh,to_number(sr.ffzje) as zje,'CW_GRSRZB' as table_name,sr.procinstid,sr.shzt,to_char(sr.lrsj,'yyyy')shrq,sr.sqr as sqr,act_status,'' AS sfdg,'' AS SFDSZF,'' AS fymc,''as dj,''as sfzc,''as sfghn,''as sflysb,''AS sffp,''AS sfkyxmjx from CW_GRSRZB sr
union all
select '' AS SRLX, sfxzgwk, 'yes' as SFJSFS,hf.zdr as zdr,hf.czr as czr,'bx' as bxlx,to_char(hf.czrq,'yyyy-MM-dd') as czrq,hf.saasdm ,''as sqywid , '电话费支付'as ywmc ,hf.sszt,hf.guid,hf.djbh,hf.xmguid as xmid,to_number(hf.je) as zje,'CW_DHFBXB' as table_name,hf.procinstid,hf.shzt,to_char(hf.czrq,'yyyy')shrq,hf.sqr as sqr,act_status,'' AS sfdg,'' AS SFDSZF,'' AS fymc,''as dj,''as sfzc,''as sfghn,''as sflysb,''AS sffp,''AS sfkyxmjx from CW_DHFBXB hf
union all
select '' AS SRLX, sfxzgwk, '' as SFJSFS,''as zdr,ys.jbr as czr, 'ys' as bxlx,to_char(ys.jdsj,'yyyy-MM-dd') as czrq, ys.saasdm,''as sqywid , '预算业务'as ywmc ,''as sszt,ys.guid,ys.djbh,ys.xmbh as xmid,to_number(ys.zysje) as zje,'YS_YSBZB' as tbale_name,ys.procinstid,ys.shzt,to_char(ys.jdsj,'yyyy')shrq,ys.jbr as sqr,act_status,'' AS sfdg,'' AS SFDSZF,'' AS fymc,''as dj,''as sfzc,''as sfghn,''as sflysb,''AS sffp,''AS sfkyxmjx from ys_ysbzb ys
union all
select '' AS SRLX, sfxzgwk,'' as SFJSFS,''as zdr,es.jbr as czr, 'ys' as bxlx,to_char(es.jdsj,'yyyy-MM-dd') as czrq,es.saasdm,''as sqywid , '预算业务(二上)'as ywmc ,es.sszt,es.guid,es.djbh,es.xmbh as xmid,to_number(es.zysje) as zje,'YS_YSBZB_ES' as tbale_name,es.procinstid,es.shzt,to_char(es.jdsj,'yyyy')shrq,es.jbr as sqr,act_status,'' AS sfdg,'' AS SFDSZF,'' AS fymc,''as dj,''as sfzc,''as sfghn,''as sflysb,''AS sffp,''AS sfkyxmjx from ys_ysbzb_es es
union all
select '' AS SRLX, sfxzgwk,'yes' as SFJSFS,sx.zdr as zdr,sx.czr as czr, 'bx' as bxlx,to_char(sx.czrq,'yyyy-MM-dd') as czrq, sx.saasdm, ''as sqywid , '实习费支付'as ywmc ,sx.sszt, sx.guid,sx.djbh,sx.xmguid as xmid ,sx.bxzje as zje,'CW_SXFBXZB'as tbale_name, sx.procinstid,sx.shzt, to_char(sx.czrq,'yyyy') as shrq,sx.bxr as sqr,sx.act_status,sx.sfdgzf AS sfdg,sx.sfdszf AS SFDSZF,'' AS fymc,''as dj,''as sfzc,''as sfghn,''as sflysb,''AS sffp,''AS sfkyxmjx from cw_sxfbxzb sx
union all
select '' AS SRLX, sfxzgwk,'' as SFJSFS,hf.zdr as zdr,hf.czr as czr,'bx' as bxlx,to_char(hf.czrq,'yyyy-MM-dd') as czrq,hf.saasdm ,''as sqywid , '托儿费汇总申请'as ywmc ,hf.sszt,hf.guid,hf.djbh,hf.xmguid as xmid,to_number(hf.je) as zje,'CW_TEFHZBXB' as table_name,hf.procinstid,hf.shzt,to_char(hf.czrq,'yyyy')shrq,hf.sqr as sqr,act_status,'' AS sfdg,'' AS SFDSZF,'' AS fymc,''as dj,''as sfzc,''as sfghn,''as sflysb,''AS sffp,''AS sfkyxmjx from CW_TEFHZBXB hf
UNION ALL
SELECT '' AS SRLX, sfxzgwk,'yes' as SFJSFS,tef.zdr as zdr,tef.czr as czr,'sq' AS BXLX, TO_CHAR(tef.CZRQ, 'yyyy-MM-dd') AS CZRQ, tef.SAASDM,'' AS SQYWID,'托儿费报销' AS YWMC, tef.SSZT, tef.GUID, tef.DJBH, tef.XMGUID AS XMID, tef.BXZJE AS ZJE, 'CW_TEFBXZB' AS TABLE_NAME, tef.PROCINSTID, tef.SHZT, TO_CHAR(tef.CZRQ, 'yyyy') SHRQ, tef.BXR AS SQR, ACT_STATUS,tef.sfdgzf AS SFDGZF,tef.sfdszf AS SFDSZF,'' AS fym,''as dj,''as sfzc,''as sfghn,''as sflysb,''AS sffp,''AS sfkyxmjx FROM CW_TEFBXZB tef
UNION ALL
SELECT '' AS SRLX, sfxzgwk,'' as SFJSFS,sg.zdr as zdr,sg.czr as czr, 'bx' AS BXLX, TO_CHAR(sg.CZRQ, 'yyyy-MM-dd') AS CZRQ, sg.SAASDM,'' AS SQYWID,'随工资代发支付' AS YWMC, sg.SSZT, sg.GUID, sg.DJBH, sg.xmguid AS XMID, CASE WHEN nvl(sg.sfcssr,'0')='0' THEN to_number(sg.BXZJE) ELSE (SELECT SUM(nvl(qt.je,0))+SUM(nvl(qt.sjsbfyye,0)) from cw_qtzfb qt WHERE qt.bxzbguid=sg.guid) END AS ZJE, 'CW_SGZDFBXZB' AS TABLE_NAME, sg.PROCINSTID, sg.SHZT, TO_CHAR(sg.CZRQ, 'yyyy') SHRQ, sg.BXR AS SQR, sg.ACT_STATUS,sg.sfdgzf AS sfdg,sg.sfdszf AS SFDSZF,sgmx.fyid AS fymc,''as dj,''as sfzc,''as sfghn,''as sflysb,sg.sffp AS sffp,sg.sfkyxmjx AS sfkyxmjx FROM CW_SGZDFBXZB sg left join cw_sgzdfbxmxb sgmx on sg.guid =sgmx.zbid
....(后面还有拼接,放不下了)
);
测试发现是拼接的表越多执行越慢,但是oracle执行起来则非常快。
请说明可能导致问题的原因或者排查思路,谢谢。
根据执行计划,创建合适的索引。
具体你得看看执行计划是什么样的,打印一下ET他慢到什么地方,还有就是你这个视图的外层条件有么有带入进去