Oracle 10g
PRO*C
À l'exécution du programme qui contient la requête suivante :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
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 sql : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?
Partager