J'ai une requête qui fonctionne assez bien pour un nombre limité de ROWNUMS mais une fois qu'elle dépasse ce ROWNUM particulier, elle est très mauvaise.PLSQL Fonction utilisée dans where clause - Performance Issue
Ci-dessous la requête:
SELECT p.col1,pv.col1 FROM tab1 p, tab2 tv, tab3 pv WHERE myFunc(pv.col1) = 1 AND tv.col1 = pv.col1 AND p.col1 = tv.col2 AND ROWNUM < 4500
Toutes ces tables ont d'énormes (plus d'un million) dossiers.
La requête ci-dessus s'exécute à une vitesse très correcte.
Si ROWNUM < 5000 ou plus alors cela prend beaucoup de temps.
Y at-il un moyen d'améliorer les performances de la requête ci-dessus?
sont les colonnes que vous avez rejoint indexé sur les trois tableaux? – diederikh
Il serait utile de savoir ce que 'myFunc' fait. –
Vous devriez examiner (et ajouter à votre question) le PLAN EXPLAIN pour l'instruction avec 'ROWNUM <1000' et l'instruction avec' ROWNUM <10000'. Sont-ils différents et comment? La fonction peut être appelée au début du plan, ou en retard, ce qui peut affecter la performance. Alternativement, la fonction peut ne rien avoir à faire avec le problème de performance. –