Bonjour,

Lorsque je lance cette requete :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
select o.ord_id,
       l.orl_id,
       o.odo_code,
       nvl(l.rcp_company, o.rcp_company) as rcp_company,
       nvl(l.rcp_contact, o.rcp_contact) as rcp_contact,
       o.ord_pricettc / 10000 as ord_pricettc,
       o.ord_reliquat / 10000 as ord_reliquat,
       abs(l.orl_qtytodel) as orl_qtytodel,
       abs(l.orl_qty) as orl_qty,
       l.orl_detail as prd_title,
       o.sta_invcode,
       l.sta_code,
       decode(l.sta_code, 'V830', 'A envoyer', 'Commande à éditer') libStatut,
       a.nfr_id,
       ld.dlo_code,
       nvl(l.oad_id, o.oad_id) as oad_id,
       o.oad_invid
  from ctb_order o
 inner join ctb_ordline l
    on (l.ord_id = o.ord_id)
 inner join ctb_ordaddress a
    on (l.oad_id = a.oad_id )
  left join ctb_ordldelivery ld
    on (ld.ord_id = l.ord_id and ld.orl_id = l.orl_id and
       ld.sta_code < 'Z999')
 where l.sta_code >= 'O500'
   and l.sta_code < 'V840'
   and l.del_code = 'REIM'
   and l.orl_canceldt is null
Elle s'exécute assez rapidement, environ 0,5 sec
Voici sont plan d'exécution

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT STATEMENT, GOAL = ALL_ROWS			1049	120	25080
 NESTED LOOPS					
  NESTED LOOPS			1049	120	25080
   NESTED LOOPS OUTER			689	120	20040
    NESTED LOOPS			404	120	17040
     TABLE ACCESS BY INDEX ROWID	CCE3	CTB_ORDLINE	164	120	15600
      INDEX RANGE SCAN	CCE3	IDX$$_60380001	5	251	
     TABLE ACCESS BY INDEX ROWID	CCE3	CTB_ORDADDRESS	2	1	12
      INDEX UNIQUE SCAN	CCE3	PK_CTB_ORDADDRESS	1	1	
    TABLE ACCESS BY INDEX ROWID	CCE3	CTB_ORDLDELIVERY	3	1	25
     INDEX RANGE SCAN	CCE3	PK_CTB_ORDLDELIVERY	2	1	
   INDEX RANGE SCAN	CCE3	PK_CTB_ORDER	2	1	
  TABLE ACCESS BY INDEX ROWID	CCE3	CTB_ORDER	3	1	42
par contre ce que je n'explique pas c'est lorsque je rajoute un filtre elle s'exécute en 60 sec...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
select o.ord_id,
       l.orl_id,
       o.odo_code,
       nvl(l.rcp_company, o.rcp_company) as rcp_company,
       nvl(l.rcp_contact, o.rcp_contact) as rcp_contact,
       o.ord_pricettc / 10000 as ord_pricettc,
       o.ord_reliquat / 10000 as ord_reliquat,
       abs(l.orl_qtytodel) as orl_qtytodel,
       abs(l.orl_qty) as orl_qty,
       l.orl_detail as prd_title,
       o.sta_invcode,
       l.sta_code,
       decode(l.sta_code, 'V830', 'A envoyer', 'Commande à éditer') libStatut,
       a.nfr_id,
       ld.dlo_code,
       nvl(l.oad_id, o.oad_id) as oad_id,
       o.oad_invid
  from ctb_order o
 inner join ctb_ordline l
    on (l.ord_id = o.ord_id)
 inner join ctb_ordaddress a
    on (l.oad_id = a.oad_id )
  left join ctb_ordldelivery ld
    on (ld.ord_id = l.ord_id and ld.orl_id = l.orl_id and
       ld.sta_code < 'Z999')
 where l.sta_code >= 'O500'
   and l.sta_code < 'V840'
   and l.del_code = 'REIM'
   and l.orl_canceldt is null
   and a.nfr_id=3159893
Pour il y a bien un index sur NFR_ID.
Voici le plan d'exécution de cette requete :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
SELECT STATEMENT, GOAL = ALL_ROWS			18	1	209
 NESTED LOOPS					
  NESTED LOOPS			18	1	209
   NESTED LOOPS OUTER			15	1	167
    NESTED LOOPS			12	1	142
     INDEX RANGE SCAN	CCE3	CEFKOAD_HAV_NFR2	3	3	36
     TABLE ACCESS BY INDEX ROWID	CCE3	CTB_ORDLINE	4	1	130
      INDEX RANGE SCAN	CCE3	IDX$$_55D80001	2	2	
    TABLE ACCESS BY INDEX ROWID	CCE3	CTB_ORDLDELIVERY	3	1	25
     INDEX RANGE SCAN	CCE3	PK_CTB_ORDLDELIVERY	2	1	
   INDEX RANGE SCAN	CCE3	PK_CTB_ORDER	2	1	
  TABLE ACCESS BY INDEX ROWID	CCE3	CTB_ORDER	3	1	42
Le cout est vraiment réduit pourtant.
J'ai reconstruit les index mais rien n'a changé.

Auriez-vous une idée?

Merci d'avance.