Bonjour à tous,

j'ai une interrogation car entre deux requêtes similaires sur la même base de données (de type ORACLE), le temps de réponse est pour l'une très court et pour l'autre très long voir impossible (time out).

La requête qui fonctionne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
SELECT ENCOURS_PLM_REAL.PLM_NUM, ENCOURS_PLM_REAL.TPL_COD, ENCOURS_SITE.SIT_LIB, ENCOURS_COMMUNE.COM_LIB, ENCOURS_PLM_REAL.PLM_PNT, ENCOURS_PLM_REAL.PLM_DSC
FROM ENCOURS_RESULTAT 
        INNER JOIN ((ENCOURS_PLM_REAL INNER JOIN ENCOURS_COMMUNE ON ENCOURS_PLM_REAL.COM_COD = ENCOURS_COMMUNE.COM_COD) 
        INNER JOIN ENCOURS_SITE ON ENCOURS_PLM_REAL.SIT_COD = ENCOURS_SITE.SIT_COD) ON ENCOURS_RESULTAT.PLM_NUM = ENCOURS_PLM_REAL.PLM_NUM
WHERE (((Exists (select 'x' from ENCOURS_RESULTAT where ENCOURS_RESULTAT.PLM_NUM = ENCOURS_PLM_REAL.PLM_NUM and ENCOURS_RESULTAT.ELE_COD = "3H" and ENCOURS_RESULTAT.RES_VAL is null))=False) 
        AND ((ENCOURS_RESULTAT.ELE_COD)="HTO" Or (ENCOURS_RESULTAT.ELE_COD)="HT") AND ((ENCOURS_RESULTAT.RES_VAL) Is Null))
        GROUP BY ENCOURS_PLM_REAL.PLM_NUM, ENCOURS_PLM_REAL.TPL_COD, ENCOURS_SITE.SIT_LIB, ENCOURS_COMMUNE.COM_LIB, ENCOURS_PLM_REAL.PLM_PNT, ENCOURS_PLM_REAL.PLM_DSC, ENCOURS_PLM_REAL.MOD_COD
        HAVING (((ENCOURS_PLM_REAL.MOD_COD)="E0184"));
Celle qui met plusieurs secondes :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
SELECT ENCOURS_PLM_REAL.PLM_NUM, ENCOURS_PLM_REAL.TPL_COD, ENCOURS_PLM_REAL.SIT_COD, ENCOURS_PLM_REAL.PLM_DSC
FROM ENCOURS_ANA_REAL INNER JOIN ENCOURS_PLM_REAL ON ENCOURS_ANA_REAL.PLM_NUM = ENCOURS_PLM_REAL.PLM_NUM
WHERE (((ENCOURS_PLM_REAL.TPL_COD)="ANI" Or (ENCOURS_PLM_REAL.TPL_COD)="AL" Or (ENCOURS_PLM_REAL.TPL_COD)="PLA" Or (ENCOURS_PLM_REAL.TPL_COD)="BV" 
        Or (ENCOURS_PLM_REAL.TPL_COD)="CR" Or (ENCOURS_PLM_REAL.TPL_COD)="FAQ" Or (ENCOURS_PLM_REAL.TPL_COD)="LD" Or (ENCOURS_PLM_REAL.TPL_COD)="LN" 
        Or (ENCOURS_PLM_REAL.TPL_COD)="SL" Or (ENCOURS_PLM_REAL.TPL_COD)="SED" Or (ENCOURS_PLM_REAL.TPL_COD)="V") AND ((ENCOURS_PLM_REAL.PLM_STA)="E") 
        AND ((Exists (select 'x' from ENCOURS_ANA_REAL where ENCOURS_ANA_REAL.PLM_NUM = ENCOURS_PLM_REAL.PLM_NUM and ENCOURS_ANA_REAL.ANR_DEB is null and ENCOURS_ANA_REAL.ANR_FIN is null))=False));
Et si j'ajoute un critère sur l'un des champs, la requête ne passe plus du tout.

Une idée ?

Merci d'avance

Rémi