Bonjour,
J'ai une requete très simple :
Je possède un index1 sur champs1 et un index2 sur (champs2, champs1) dans cet ordre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT champs1, champs2, champs3 FROM table WHERE champs1 in ('A','B') and champs1 <> 'C'
En exécutant la requête comme cela, Oracle me fait un table access full.
Si je modifie la requete en supprimant champs3 du select, Oracle utilise l'index sur (champs2, champs1).
Question :
- Quelle(s) pourrai(en)t être la ou les raisons de la non utilisation de l'index1 dans le premier cas ?
- Idem dans le second cas, pourquoi utilise-t-il index2 qui début par un champs non présent dans la clause where ?
Pour information, la table possède d'autres champs ainsi que d'autres indexs ne commençant ni par champs1 ni par champs2.
De plus ce problème ne se produit pas sur mon environnement de dev qui lui ne possède que les index1 et 2.
Edit> J'ai supprimé les indexs autres que le 1 et 2 sur la base ou j'ai le problème, et ce dernier persiste.
Merci d'avance.
Partager