2016-11-07 111 views
-1

- 预需要帮助优化下面查询

WITH pims AS 
(
SELECT code, value 
    FROM T_QNT_EXT_INFO_TITRES 
WHERE filter = 'PIMS' 
    AND key = 'INSTRUMENT' 
), 
generic_param_value as 
(
select value 
    from T_OPS_GENERIC_PARAM 
where process='PIMSREC' 
    and field in('HBEU_ISSU_INC','HBEU_INV_INC', 
       'HBEU_TRADE_INC', 'HBAP_TRADE_INC') 
) 

select t.sicovam, pims.value ,t.devisectt 
    from titres t, 
     AUDIT_MVT a, 
     histomvts h, 
     pims  
    WHERE t.sicovam = pims.code 
    and pims.value is not null 
    and t.affectation not in (4, 12) 
    and t.type not in ('A','F','E','M') 
    and t.sicovam IN (SELECT DISTINCT nvl(h.sicovam, a.sicovam) 
         FROM AUDIT_MVT a, histomvts h 
         WHERE a.refcon=h.refcon(+) 
         AND a.DATEMODIF >= (SELECT MAX(MARKER_DATE) 
               FROM REMOTE_SECURITY.MARKERS 
               WHERE MARKER LIKE '%_SOPUS.%'    
               AND MARKER_DATE < TO_DATE('&2 10:00','YYYYMMDD HH:MI')) 
          AND a.DATEMODIF < (SELECT NVL(MIN(MARKER_DATE),SYSDATE) FROM REMOTE_SECURITY.MARKERS WHERE MARKER LIKE '%_SOPUS.%' AND MARKER_DATE > TO_DATE('&2 10:00','YYYYMMDD HH24:MI')) 
          AND EXISTS (select 1 from business_events b where decode(a.version,1,h.type,a.type)=b.id and (b.compta in (0,1) or b.id=15)) 
          AND coalesce(a.hsbc_opcvm_upd, 0) <> 1 --mark a trade's modification if it's Drag and Drop 
          AND decode(a.version,1,h.typesico,a.typesico) NOT IN (4) 
          AND exists (SELECT 1 FROM FOLIO, generic_param_value where ident=decode(a.state, 3, a.opcvm, h.opcvm) START WITH IDENT =generic_param_value.value 
             CONNECT BY PRIOR IDENT = MGR) 
        )   
    and not exists (SELECT 1 FROM T_QNT_EXT_INFO_TITRES t2 WHERE t2.CODE = t.sicovam 
         and t2.filter = 'PIMS' 
         and t2.KEY = 'TYPE' 
         and t2.VALUE in ('DPT', 'DFD/LBK') 
        ) 
    and (((pims.value like 'P%') 
      and 
      ((t.affectation <>5) 
      OR 
      (t.affectation=5 and (exists(select 1 from histomvts where contrepartie= 10019816 and sicovam=t.sicovam) OR lower(t.libelle) LIKE '%fees linked to p%')) 
     ) 
     ) 
     OR 
     (pims.value not like 'P%') 
     );  
+2

人们很难帮助你,因为首先你需要访问测试模式,其次是我认为这是一个糟糕的问题。 –

+0

我试着格式化你的查询了一下。如果你可以让其余部分合理可读,这将有所帮助。告诉我们查询计划是什么。告诉我们存在哪些指标。告诉我们需要多长时间才能运行。告诉我们你的目标是什么。告诉我们这些桌子有多大。告诉我们哪些谓词是有选择性的。现在,任何人都无法猜测什么可能会很慢。 –

回答

2

查询是很长,所以很难去分析它的语法是不是最好的。

我的建议是:
1.获取您正在使用相同的表在主查询,所以你应该能够正常获得的结果,其中条件的子查询子查询摆脱对t.sicovam IN
2.第二问题是likeor

组合如果您需要更多的帮助,请重写查询,以便更好地语法联接,交表架构并简要说明你喜欢什么才达到。