la dernière requête ne fonctionne pas ?
tiens... étrange... faudrait voir les explain plan.
Tu peux essayer :
et sans le NOT EXISTS pour voir quelle partie de la requête pose problème
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
31
32
33 SELECT 1 FROM (SELECT 1 FROM bde_sim_site_reel bsr INNER JOIN bde_sim_base_dr bdr ON bsr.code_dr = bdr.dr_code INNER JOIN bde_sim_site_reel_mod_val mod_val_0 ON mod_val_0.sit_sit_key = bsr.sit_sit_key WHERE bdr.urm_code = 'PA' AND bsr.es = '1' AND mod_val_0.sit_mod_key = 418 AND mod_val_0.sit_mod_obj_val NOT IN ('2367', '1946', '2443') UNION ALL SELECT 1 FROM bde_sim_site_reel bsr INNER JOIN bde_sim_base_dr bdr ON bsr.code_dr = bdr.dr_code INNER JOIN bde_sim_site_reel_mod_val mod_val_0 ON mod_val_0.sit_sit_key = bsr.sit_sit_key WHERE bdr.urm_code = 'PA' AND bsr.es = '1' AND mod_val_0.sit_mod_key = 586 AND mod_val_1.sit_mod_obj_val != '2011' ) WHERE NOT EXISTS ( SELECT 1 FROM bde_sim_site_reel INNER JOIN bde_sim_site_reel_mod_val ON bde_sim_site_reel_mod_val.sit_sit_key = bde_sim_site_reel.sit_sit_key INNER JOIN bde_sim_base_dr ON bde_sim_site_reel.code_dr = bde_sim_base_dr.dr_code WHERE bde_sim_site_reel_mod_val.sit_mod_key IN (534, 483) AND bde_sim_site_reel_mod_val.sit_mod_obj_val = '0' AND bde_sim_base_dr.urm_code = 'PA' AND bde_sim_site_reel.sit_sit_key = bsr.sit_sit_key)![]()








Voici l'explain plan de la requête initiale.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 Plan hash value: 1517578016 ---------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | ---------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 153 | 472K| | 12547 (3)| 00:02:31 | |* 1 | FILTER | | | | | | | |* 2 | HASH JOIN | | 1568 | 4840K| 4472K| 12547 (3)| 00:02:31 | |* 3 | HASH JOIN | | 2132 | 4440K| 3720K| 8038 (3)| 00:01:37 | |* 4 | HASH JOIN | | 3405 | 3674K| | 3666 (3)| 00:00:44 | |* 5 | HASH JOIN | | 3970 | 298K| | 52 (2)| 00:00:01 | |* 6 | TABLE ACCESS FULL | BDE_SIM_BASE_DR | 11 | 66 | | 5 (0)| 00:00:01 | |* 7 | TABLE ACCESS FULL | BDE_SIM_SITE_REEL | 18768 | 1301K| | 47 (3)| 00:00:01 | |* 8 | TABLE ACCESS FULL | BDE_SIM_SITE_REEL_MOD_VAL | 16097 | 15M| | 3612 (3)| 00:00:44 | |* 9 | TABLE ACCESS FULL | BDE_SIM_SITE_REEL_MOD_VAL | 11753 | 11M| | 3612 (3)| 00:00:44 | |* 10 | TABLE ACCESS FULL | BDE_SIM_SITE_REEL_MOD_VAL | 13797 | 13M| | 3612 (3)| 00:00:44 | | 11 | NESTED LOOPS | | 151 | 154K| | 29 (4)| 00:00:01 | | 12 | NESTED LOOPS | | 1 | 23 | | 3 (0)| 00:00:01 | | 13 | TABLE ACCESS BY INDEX ROWID | BDE_SIM_SITE_REEL | 1 | 17 | | 2 (0)| 00:00:01 | |* 14 | INDEX UNIQUE SCAN | BDE_SIM_SITE_REEL_PK | 1 | | | 1 (0)| 00:00:01 | |* 15 | TABLE ACCESS BY INDEX ROWID | BDE_SIM_BASE_DR | 11 | 66 | | 1 (0)| 00:00:01 | |* 16 | INDEX UNIQUE SCAN | PK_BDE_BASE_DR | 1 | | | 0 (0)| 00:00:01 | |* 17 | TABLE ACCESS FULL | BDE_SIM_SITE_REEL_MOD_VAL | 151 | 151K| | 26 (4)| 00:00:01 | | 18 | NESTED LOOPS | | 79 | 83029 | | 96 (3)| 00:00:02 | | 19 | NESTED LOOPS | | 1 | 23 | | 3 (0)| 00:00:01 | | 20 | TABLE ACCESS BY INDEX ROWID| BDE_SIM_SITE_REEL | 1 | 17 | | 2 (0)| 00:00:01 | |* 21 | INDEX UNIQUE SCAN | BDE_SIM_SITE_REEL_PK | 1 | | | 1 (0)| 00:00:01 | |* 22 | TABLE ACCESS BY INDEX ROWID| BDE_SIM_BASE_DR | 11 | 66 | | 1 (0)| 00:00:01 | |* 23 | INDEX UNIQUE SCAN | PK_BDE_BASE_DR | 1 | | | 0 (0)| 00:00:01 | |* 24 | TABLE ACCESS FULL | BDE_SIM_SITE_REEL_MOD_VAL | 79 | 81212 | | 93 (3)| 00:00:02 | ---------------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter( NOT EXISTS (SELECT /*+ */ 0 FROM "BDE_SIM_BASE_DR" "BDE_SIM_BASE_DR","BDE_SIM_SITE_REEL_MOD_VAL" "BDE_SIM_SITE_REEL_MOD_VAL","BDE_SIM_SITE_REEL" "BDE_SIM_SITE_REEL" WHERE "BDE_SIM_SITE_REEL"."SIT_SIT_KEY"=:B1 AND "BDE_SIM_SITE_REEL_MOD_VAL"."SIT_MOD_KEY"=483 AND "BDE_SIM_SITE_REEL_MOD_VAL"."SIT_MOD_OBJ_VAL"='0' AND "BDE_SIM_SITE_REEL_MOD_VAL"."SIT_SIT_KEY"=:B2 AND "BDE_SIM_SITE_REEL"."CODE_DR"="BDE_SIM_BASE_DR"."DR_CODE" AND "BDE_SIM_BASE_DR"."URM_CODE"='PA') OR NOT EXISTS (SELECT /*+ */ 0 FROM "BDE_SIM_BASE_DR" "BDE_SIM_BASE_DR","BDE_SIM_SITE_REEL_MOD_VAL" "BDE_SIM_SITE_REEL_MOD_VAL","BDE_SIM_SITE_REEL" "BDE_SIM_SITE_REEL" WHERE "BDE_SIM_SITE_REEL"."SIT_SIT_KEY"=:B3 AND "BDE_SIM_SITE_REEL_MOD_VAL"."SIT_MOD_KEY"=534 AND "BDE_SIM_SITE_REEL_MOD_VAL"."SIT_MOD_OBJ_VAL"='0' AND "BDE_SIM_SITE_REEL_MOD_VAL"."SIT_SIT_KEY"=:B4 AND "BDE_SIM_SITE_REEL"."CODE_DR"="BDE_SIM_BASE_DR"."DR_CODE" AND "BDE_SIM_BASE_DR"."URM_CODE"='PA')) 2 - access("MOD_VAL_4"."SIT_SIT_KEY"="BSR"."SIT_SIT_KEY") 3 - access("MOD_VAL_0"."SIT_SIT_KEY"="BSR"."SIT_SIT_KEY") 4 - access("MOD_VAL_1"."SIT_SIT_KEY"="BSR"."SIT_SIT_KEY") 5 - access("BSR"."CODE_DR"="BDR"."DR_CODE") 6 - filter("BDR"."URM_CODE"='PA') 7 - filter("BSR"."ES"='1') 8 - filter("MOD_VAL_1"."SIT_MOD_KEY"=586 AND "MOD_VAL_1"."SIT_MOD_OBJ_VAL"<>'2011') 9 - filter("MOD_VAL_0"."SIT_MOD_KEY"=418 AND "MOD_VAL_0"."SIT_MOD_OBJ_VAL"<>'2367' AND "MOD_VAL_0"."SIT_MOD_OBJ_VAL"<>'1946') 10 - filter("MOD_VAL_4"."SIT_MOD_KEY"=418 AND "MOD_VAL_4"."SIT_MOD_OBJ_VAL"<>'2443') 14 - access("BDE_SIM_SITE_REEL"."SIT_SIT_KEY"=:B1) 15 - filter("BDE_SIM_BASE_DR"."URM_CODE"='PA') 16 - access("BDE_SIM_SITE_REEL"."CODE_DR"="BDE_SIM_BASE_DR"."DR_CODE") 17 - filter("BDE_SIM_SITE_REEL_MOD_VAL"."SIT_MOD_KEY"=483 AND "BDE_SIM_SITE_REEL_MOD_VAL"."SIT_MOD_OBJ_VAL"='0' AND "BDE_SIM_SITE_REEL_MOD_VAL"."SIT_SIT_KEY"=:B1) 21 - access("BDE_SIM_SITE_REEL"."SIT_SIT_KEY"=:B1) 22 - filter("BDE_SIM_BASE_DR"."URM_CODE"='PA') 23 - access("BDE_SIM_SITE_REEL"."CODE_DR"="BDE_SIM_BASE_DR"."DR_CODE") 24 - filter("BDE_SIM_SITE_REEL_MOD_VAL"."SIT_MOD_KEY"=534 AND "BDE_SIM_SITE_REEL_MOD_VAL"."SIT_MOD_OBJ_VAL"='0' AND "BDE_SIM_SITE_REEL_MOD_VAL"."SIT_SIT_KEY"=:B1) Note ----- - dynamic sampling used for this statement
C'est clair qu'il te manque un index sur bde_sim_site_reel_mod_val.sit_sit_key
vu le nombre de FULL SCAN il doit probablement manquer des indexes. Vérifies que les colonnes sur lesquelles portent les jointures sont bien incluses dans des indexes.
URM_CODE par exemple semble être un bon candidat dans BDE_SIM_BASE_DR. Et évidemment au moins sit_sit_key doit être dans un index sur les 3 tables en FTS puisqu'apparemment c'est l'identifiant
Moi j'essayerai :
sur bde_sim_site_reel_MOD_VAL : SIT_MOD_KEY,SIT_MOD_OBJ_VAL,sit_sit_key (l'ordre dépend de la PK de cette table, peut-être que SIT_MOD_KEY,sit_sit_key,SIT_MOD_OBJ_VAL sera mieux exploiter par d'autres requêtes)
sur bde_sim_base_dr : dr_code,urm_code
sur bde_sim_site_reel : sit_sit_key,code_dr, es








YAHOOOOOOOOOOOOOO
J'ai rajouté 2 index dans bde_sim_site_reel_mod_val : sit_sit_key et sit_mod_key.
Le temps d'execution est de 2 secondes.
Merci à toi et a Mcm pour votre aide
Partager