Bonjour,
j'ai un gros problème de performance au niveau d'une de mes requêtes update qui comprend un select à l'interieur du set, au niveau du cout de la requête c une catastrophe mais je ne sais pas comment faire autrement...
voici la requête :
j'ai ajouté cette requête sql et le plan d'exécution fourni par sql developper en pièces jointes.
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 UPDATE m2oPointComptage pds SET m2oDateRaccorde = ( SELECT DISTINCT first_value(e.m2oDateDerRx) over (partition BY pds.sysId order by e.sysUpdTime) FROM m2oCompteur cpt, m2oEquipement eq, m2oHrNbRecepCr e WHERE e.m2oTraite = 'N' AND e.m2oIdEquipement = eq.m2oAdresseRadio AND e.m2oTypeDeTrame = '3' AND eq.sysClass = 'm2oModule' AND eq.m2oTechno = 'HR' AND cpt.sysId = eq.m2ocompteur_id AND pds.sysId = cpt.m2opointcomptage_id AND e.m2oDateDerRx IS NOT NULL AND pds.m2oDateRaccorde IS NULL ) WHERE pds.m2oDateRaccorde IS NULL AND EXISTS (SELECT 1 FROM m2oCompteur cpt, m2oEquipement eq, m2oHrNbRecepCr e WHERE e.m2oTraite = 'N' AND e.m2oIdEquipement = eq.m2oAdresseRadio AND e.m2oTypeDeTrame = '3' AND eq.sysClass = 'm2oModule' AND eq.m2oTechno = 'HR' AND cpt.sysId = eq.m2ocompteur_id AND pds.sysId = cpt.m2opointcomptage_id AND e.m2oDateDerRx IS NOT NULL )
Pour info les champs sysid sont les clefs primaires de mes tables.
J'ai essayé de créer tous les index possibles mais je pense que je suis arrivé au bout de cette possibilité... :
Que faut-il que je fasse ? il doit bien avoir un autre moyen d'écrire cette requête update...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 CREATE INDEX m2ohrnbrecepcr_i1 ON M2OHRNBRECEPCR(M2OTRAITE, M2OIDCR, M2OIDEQUIPEMENT) TABLESPACE INDX; CREATE INDEX m2oequipement_i1 ON M2OEQUIPEMENT(M2OADRESSERADIO, M2OTECHNO, SYSCLASS) TABLESPACE INDX; CREATE INDEX m2ohrnbrecepcr_i1 ON M2OHRNBRECEPCR(M2OIDEQUIPEMENT, M2OIDCR, M2OTRAITE) TABLESPACE INDX; CREATE INDEX CI4B2EE1C72FE0CBDA ON M2OCOMPTEUR(M2OPOINTCOMPTAGE_ID)
Ou est-ce qu'il faut que passe en pl/sql avec un curseur ?
please help !
merci d'avance,
Renaud
Partager