Mot clé SQL 'IN'. Comment l'éviter?
Bonjour,
Je cherche à éviter l'utilisation du mot clé IN ds mes requetes sql.
Voila pas exemple une des mes requetes que je voudrais modifier:
J'ai un index sur la colonne matricule
Code:
1 2 3 4 5
| select
m.nom
from TabMatricule m
where
m.matricule IN ('1895008345','1397104117','8194700690') |
Oracle me converti ca en une suite de 'OR' et me lance un full scan table.
Comment eviter ca? Je voudrais que pour chaque matricule recherché, oracle fasse une recherche par index.
La difficulté est dans le fait que je ne connais pas le nombre de matricules que mes applis clients vont m'envoyer. Il est probable que je recoive des traitements avec 2000 matricules en parametre. Je ne peux donc pas faire ca par exemple:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| select
m.nom
from TabMatricule m
where
m.matricule IN ('1895008345')
UNION ALL
select
m.nom
from TabMatricule m
where
m.matricule IN ('1397104117')
UNION ALL
select
m.nom
from TabMatricule m
where
m.matricule IN ('8194700690') |
Avez vous une idée pour résoudre ce problème?
Bien cordialement
X.