Bonjour à tous,
J'ai une table : EVE dont voici une partie de la structure :
CODSOC
ACHVTE
TYPEVE
NUMEVE
CODETA
DATMOD
DATLIV
DATEXP
REFEXT
etc.
Il n'y a pas de "contrainte" (primary key) définie dessus.
En revanche, j'ai notamment ces quatre index :
EVE_IDX1 (UNIQUE) (CODSOC, ACHVTE, TYPEVE, NUMEVE)
W_EVE_IDX3 (NON UNIQUE) (CODSOC, ACHVTE, TYPEVE, NUMEVE, CODETA, DATLIV)
W_EVE_IDX4 (NON UNIQUE) (CODSOC, ACHVTE, DATMOD, TYPEVE, NUMEVE)
W_EVE_IDX5 (NON UNIQUE) (CODSOC, ACHVTE, TYPEVE, NUMEVE, CODETA, DATEXP)
Et là, je ne comprends pas.
Le premier est un index fourni par l'éditeur du modèle des données.
Les trois autres ont été rajoutés par un DBA en interne, pour améliorer les performances de requêtes.
Pour W_EVE_IDX4, je comprends que dans le cas où j'ai un filtre seulement sur CODSOC, ACHVTE, DATMOD, il puisse être utile. Je ne comprends en revanche pas pourquoi NUMEVE fait partie de l'index.
Mais pour W_EVE_IDX3 et W_EVE_IDX5, quelle est leur utilité ? Ils contiennent en intégralité l'index unique W_EVE_IDX1. Donc si fait un filtre sur CODSOC, ACHVTE, TYPEVE, NUMEVE, on est déjà au niveau ligne. A quoi ça sert d'ajouter d'autres champs ?
Étonnamment, ces index sont bel et bien utilisés par Oracle (10gR1).
Quelqu'un peu m'expliquer ?