Bonjour,

Je rencontre un problème lié à la bonne utilisation des index sous Oracle 10g.

Je dispose d'une table case_variable :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE CASE_VARIABLE
(
  TCID        NUMBER(10)                        NOT NULL,
  VARIABLE    VARCHAR2(64 BYTE)                 NOT NULL,
  TYPE        NUMBER(5)                         NOT NULL,
  RANK        NUMBER(5),
  VALUE       VARCHAR2(2000 BYTE)
)
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
NOMONITORING;
A laquelle j'ai ajouté l'index suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
CREATE INDEX INX_TCID_VAR_RK ON CASE_VARIABLE
(TCID, VARIABLE, RANK)
NOLOGGING
NOPARALLEL;
Je précise que la table ne possède pas de clef primaire, je ne sais pas si ça a de l'importance pour la suite.

Je souhaite récupérer une liste de données, j'utilise la requête suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
SELECT   w.id, obj.VALUE
FROM      workcase w
INNER JOIN case_variable obj ON obj.tcid = w.id AND obj.variable = 'objet_dde';
Dans ce cas, il se trouve que l'index n'est pas utilisé (j'utilise le paramètre MONITORING et la table V$OBJECT_USAGE pour m'en assurer). Et je me demande bien pourquoi !

Car si j'exécute la requête suivante, l'index est correctement utilisé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
SELECT   *
  FROM   case_variable
 WHERE   tcid = 288069 AND variable = 'objet_dde';
Je précise que, n'étant pas admin de la base, je ne peux malheureusement pas faire de "explain plan".

Merci d'avance.