J'essaie désespérément d'exécuter une requête - plutôt basique - en espérant la voir passer par un index, et, quelque soit le sens je n'y parviens pas.
J'utilise une base Oracle 8i sur Unix 5.2
voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT TB_O_LIG_TKV.NB_LIG_TKV_QT g, TB_O_ENT_TKV.ID_TPS_JOU ID_JOU FROM ODS.TB_O_LIG_TKV TB_O_LIG_TKV, ODS.TB_O_ENT_TKV TB_O_ENT_TKV WHERE TB_O_ENT_TKV.ID_TPS_JOU > ((to_number(to_char(sysdate,'yyyy'))-1)*10000)+101 AND TB_O_ENT_TKV.ID_ENT_TKV=TB_O_LIG_TKV.ID_ENT_TKV
sur Toad, j'obtiens l'Explain Plan suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Operation Object Name Rows Bytes Cost Object Node In/Out PStart PStop SELECT STATEMENT Hint=CHOOSE 796 K 100670 HASH JOIN 796 K 49 M 100670 TABLE ACCESS BY INDEX ROWID TB_O_ENT_TKV 796 K 29 M 1186 INDEX RANGE SCAN IX_FK_ENT_TKV_TPS_JOU 796 K 701 TABLE ACCESS FULL TB_O_LIG_TKV 19 M 487 M 28303
la table tb_o_ent_tkv possède 16 M lignes et les indexes sont les suivants :
IX_ENT_TKV_ID_COL (CD_ENT_TKV_ID_COL)
IX_FK_ENT_TKV_EMP (ID_EMP)
IX_FK_ENT_TKV_TPS_JOU (ID_TPS_JOU)
PK_ENT_TKV (ID_ENT_TKV)
la table tb_o_lig_tkv, quant à elle, dispose de 19,6 M lignes et les indexes sont les suivants :
IX_FK_LIG_TKV_UVC (ID_UVC)
IX_LIG_TKV_ID_ENT (ID_ENT_TKV)
IX_LIG_TKV_TYP_ENT (CD_LIG_TKV_TYP, ID_ENT_TKV)
PK_LIG_TKV (ID_LIG_TKV)
j'ai tenté d'ajouter des commandes du type /*+ leading (ODS.TB_O_LIG_TKV IX_LIG_TKV_ID_ENT) */ afin de forcer l'utilisation de l'index...
...mais rien n'y fait.
Partager