De la part de Gabriel : Lorsque l’on utilise SYSDATE dans une requête, Oracle évalue la valeur de la date système SYSDATE à chaque ligne.
Par exemple avec cette requête :
select count(*) from ZX8K where perpai='MT'||to_char(SYSDATE, 'YYYYMM');
Oracle lance environ 5 500 000 évaluations de SYSDATE. Le temps d’exécution est de 8,25 secondes.
Résolution : sous sqlplus, la valeur de la colonne SYSDAT est stockée dans une "variable sqlplus" nommée SYSDATE une fois pour toute :
set verify off
column SYSDAT NEW_VALUE SYSDATE NOPRINT
select 'to_date('''
|| to_char(SYSDATE, 'YYYY-MM-DD-HH24.MI.SS')
|| ''', ''YYYY-MM-DD-HH24.MI.SS'')' as SYSDATE
from DUAL;
La requête devient :
select count(*) from ZX8K where perpai='MT'||to_char(&SYSDATE., 'YYYYMM');
Le temps d’exécution passe à 1 seconde.