Voila mon soucis :
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 Table : TSTOCK ( STDATE DATE NOT NULL, MATID NUMBER (5) NOT NULL, EMPID NUMBER (10) NOT NULL, SITID NUMBER (10) NOT NULL, QUANTITE NUMBER (15,3), SMATORIG VARCHAR2 (10) NOT NULL, MID NUMBER (5), SIT_NOM VARCHAR2 (30)) PRIMARY KEY ( STDATE, MATID, EMPID, SMATORIGINE ) INDEX ON TSTOCK(MATID) INDEX ON TSTOCK(EMPID) INDEX ON TSTOCK(SMATORIGINE) INDEX ON TSTOCK(SITID) INDEX ON TSTOCK(SIT_NOM) La table et les index sont dans 2 tablespace séparé.Cette requête met plus de 45 mn sous Oracle 9.2.0.8 (analise a été réalisé sur les tables et index) alors que la même requête sous une base identique sous Oracle 8.1.7.4 met 16 s. (les explains plans me montrent bine que dans un cas on fait un scan full et dans l'autre on utilise les index)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Requete : SELECT S.SIT_NOM, sum(S.QUANTITE) FROM TSTOCK S WHERE S.SMFM_ID = 10000 AND S.MID = 7 AND S.STDATE = ( select max(M.stdate) from TSTOCK M WHERE M.SITID = S.SITID AND M.MID = 7 AND M.SMFM_ID = 10000) group by S.SSIT_NOM
Par contre cette même requête sous Oracle 9 mais cette fois sans la jointure sur le SITID me permet d'avoir un temps de réponse identique que sous Oracle 8.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Requete : SELECT S.SIT_NOM, sum(S.QUANTITE) FROM TSTOCK S WHERE S.SMFM_ID = 10000 AND S.MID = 7 AND S.STDATE = ( select max(M.stdate) from TSTOCK M WHERE M.MID = 7 AND M.SMFM_ID = 10000) group by S.SSIT_NOM
Donc ma question me manquerait'il pas un index plus efficace que la CBO d'Oracle 9 considère comme nécessaire pour le bon déroulement de la requête
et si oui lequel ?
Merci
PS : Dans le forum administration j'avais déjà interrogé sur la question car pour moi au départ, c'était un problème entre Oracle9 et ORacle 8 mais là je décide de prendre le problème sous un autre angle celui de la requête.
MErci
Partager