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 :
Celle qui met plusieurs secondes :
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"));
Et si j'ajoute un critère sur l'un des champs, la requête ne passe plus du tout.
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));
Une idée ?
Merci d'avance
Rémi
Partager