Bonjour,

J'ai un problème d'optimisation lors d'une requête : Oracle ne choisit pas la meilleure solution pour joindre mes tables.

Admettons la requête suivante pour simplifier :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
select *
from TAB1, TAB2
where TAB1.nom=TAB2.nom
and fonction_tordue(TAB1.nom,TAB2.nom)>0.50
Ma fonction tordue est comme son nom l'indique : tordue donc lente.

Le problème que plutot de commencer par faire l'égalité sur le nom pour réduire le nombre de ligne et donc le nombre d'utilisation de cette fonction, il commence par fonction_tordue(TAB1.nom,TAB2.nom)>0.50 .

J'ai regardé le hint ORDERED_PREDICATES mais il s'utilise juste pour spécifier l'ordre des filtres (nom='DUPONT' ou REVENU > 600), il n'a pas d'impact sur les jointures (n° client = n° client...).

Auriez vous un conseil pour retravailler la requêtes ou le cas échéant un hint ?

Je me demande si procéder de la sorte a un impact (j'essaierai demain) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
select *
from TAB1, TAB2
where (TAB1.nom=TAB2.nom
and (fonction_tordue(TAB1.nom,TAB2.nom)>0.50))
Merci d'avance pour vos conseils.