Bonjour,


j'ai 'hérité' d'une requête de la forme suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT PK-CH3, PK-CH2, champ1, champ2, PK-CH5, champ3
  FROM MaTable table1
 WHERE table1.PK-CH7 = 'ABC'
   and table1.PK-CH4 = 'A'
   and table1.PK-CH6 = 'ABC'
   and table1.PK-CH1 = (select max(PK-CH1)
                          from MaTable
                         where PK-CH3 = table1.PK-CH3
                           and PK-CH2 = table1.PK-CH2
                           and PK-CH7 = table1.PK-CH7
                           and PK-CH5 = table1.PK-CH5
                           and PK-CH6 = table1.PK-CH6
                           and PK-CH4 = table1.PK-CH4)
   and table1.PK-CH5 = to_date(to_char(table1.PK-CH5, 'MM/YYYY'), 'MM/YYYY')
   and table1.PK-CH5 between i_date_deb and i_date_fin;
avec
  • PK-CHx des éléments de la PK (qui est composée des champs PK-CH1 à 7) de la table [TABLE]
  • PK-CH1 et PK-CH5 sont des dates, PK-CH2 un number et le reste du varchar2
  • champx des données quelconques de la table [TABLE]


La volumétrie est très importante (une grosse dizaine de millions de lignes)...

Que conseilleriez-vous pour optimiser cette 'charmante' requête et diminuer grandement son temps d'exécution ?