Index utilisé sous PL/SQL Developper mais pas par l'appli
Bonjour,
Je suis confronté à un drôle de problème.
Un traitement de purge est lancé par une application. Elle consiste à supprimer les enregistrements de plus d'un an, et cela par paquet de 5000.
Le problème est que cette requête est super longue (cela bloque la purge d'autres tables), et comme c'est par paquet vous imaginez bien que exponentiel..
Voici la requête :
Code:
DELETE FROM nmstrackinglogrcp WHERE tslog < to_timestamp('20110119025529', 'YYYYMMDDHH24MISS') AND ROWNUM <= 5000
En regardant le plan d'exécution, on s'aperçoit que l'optimiseur n'utilise pas l'index NMSTRACKINGLOGRCP_LOGDATE sur le champ tsLog. Il fait un TABLE ACCESS (STORAGE FULL).
Par contre, quand je lance la même requête sous PL/SQL Developper, il utilise bien l'index (INDEX FULL SCAN).
J'ai déjà essayé de recréer l'index, cela a fonctionné... 1 fois. Par la suite, l'index fut une nouvel fois laissé de côté.
Je n'ai pas la possibilité de modifier la requête lancé par l'application (boîte noire).
Avez-vous une idée ?
Merci d'avance ;)