Forcer l'utilisation d'un index (hint INDEX)
Oracle 10g
PRO*C
À l'exécution du programme qui contient la requête suivante :
Code:
1 2 3 4
| EXEC SQL
SELECT /*+ INDEX(COM_REC I1_COM_REC) */ *
FROM COM_REC
WHERE DATDEB_COM >= TO_DATE('19000101', 'YYYYMMDD'); |
L'index n'est jamais utilisé, on passe systématiquement par un table full scan
le hint index n'est pas pris en compte.
SQL*Plus
À l'exécution de la même requête sous SQL*Plus, on passe bien par l'index :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| SQL>set autotrace traceonly explain
SQL>select /*+ index(com_rec i1_com_rec) */
2 * from com_rec where datdeb_com >= to_date( '19000101','YYYYMMDD');
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=0 Card=1 Bytes=469)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'COM_REC' (TABLE) (Cost=0
Card=1 Bytes=469)
2 1 INDEX (RANGE SCAN) OF 'I1_COM_REC' (INDEX) (Cost=0 Card=
1) |
Pourquoi cette différence de comportement entre le PRO*C et SQL*Plus ?