Bonjour,
Lorsque je lance cette requete :
Elle s'exécute assez rapidement, environ 0,5 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 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
Voici sont plan d'exécution
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 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
Pour il y a bien un index sur NFR_ID.
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
Voici le plan d'exécution de cette requete :
Le cout est vraiment réduit pourtant.
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
J'ai reconstruit les index mais rien n'a changé.
Auriez-vous une idée?
Merci d'avance.
Partager