2016-11-07 9 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

最初にテストスキーマにアクセスする必要があるため、人々に手伝ってもらえませんか?第2に、それは悪い質問だと思います。 –

+0

私は少しあなたのクエリをフォーマットしようとしました。合理的に読めるように残りの部分を作ることができれば、それは役に立ちます。クエリプランが何であるか教えてください。どのようなインデックスが存在するか教えてください。実行に要する時間を教えてください。あなたの目標が何であるか教えてください。テーブルの大きさを教えてください。どの述語が選択的であるか教えてください。今は、誰が何が遅いかを推測できる方法はありません。 –

答えて

2

を事前にそれを分析することは困難であるよう最善ではありません。

私のアドバイスは、次のようになります。
1サブクエリでt.sicovam INためにサブクエリを取り除くあなたがメインのクエリで同じテーブルを使用しているあなたは、通常の場所の条件で結果を得ることができるはずですので。
2。第2の問題は、あなたがより多くの助けが必要な場合は、参加するためのより良い構文にクエリを書き換え後のテーブルのスキーマとあなたがachiveしたいものを簡単に説明してくださいlikeor

の組み合わせです。

関連する問題