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é.
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
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.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.

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