Bonjour,
j'ai un problème de perf sur une de mes requêtes, en particulier sur une whereclause like !
J'ai 2 tables :
- table client (codeclient varchar2(20), autrecols varchar2(10)) avec un index sur la colonne codeclient. Cette table contient environ 800k lignes
- table parametre (param varchar2(512))
Le fonctionnement de mon outil est le suivant :
- un ensemble de requête sont prédéfinies dans le code
- l'utilisateur saisie des paramètres d'entrée (ca peut etre des chaines caractères, des nombres, ... d'où le varchar2 à 512)
- ces paramètres sont chargés dans la table parametre
- la requête prédéfinie va faire ensuite des select dans les tables qui vont bien
Le pb, c'est que l'utilisateur a besoin de mettre des caractères joker (%). Ainsi, il peut rentrer un paramètre DUP% ... ca ira dans ma table client, et retournera DUPONT, DUPOND, DUPOUET, DUPMACHIN ...
Alors, autant la requête :
select c.* from client c where c.codeclient like 'DUP%';
est instantanée (car elle utilise l'index).
Autre la requête :
select c.* from client c,parametre p where c.codeclient like p.param;
est super long; car n'utilise pas l'index, ... et la cardinalité explose.
J'ai vu que sur interbase, il y a une commande "starting by" qui est un truc qui ressemble au like avec un % à la fin (donc permettant l'utilisation de l'index). Mais en oracle 9i (là ou je suis), il n'y a pas d'équivalent.
Existe-t-il un moyen de forcer l'index par hint ?!?
Merci !!!
Partager