Bonjour à tous,

je suis actuellement en train d'essayer d'optimiser une requête qui est plutôt lourde :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
SELECT AN.id_presto, BLG.id_logiciel, BLG.aan_id, TRUNC(BLG.blg_date, 'MM') as blg_date, count(*) as total
    FROM T_BRIDGELOG_BLG BLG, ANNONCE AN
    WHERE BLG.id_annonce = AN.id_annonce
      AND BLG.id_logiciel > 0
      AND TRUNC(blg_date, 'MM') in ( TRUNC(sysdate, 'MM'), TRUNC( ADD_MONTHS(SYSDATE, - 1 ) ) )
      GROUP BY id_presto, id_logiciel, aan_id, TRUNC(BLG.blg_date, 'MM')
SELECT STATEMENT, GOAL = ALL_ROWS Cost=26541 Cardinality=12383 Bytes=1164002
HASH GROUP BY Cost=26541 Cardinality=12383 Bytes=1164002
NESTED LOOPS Cost=26270 Cardinality=12383 Bytes=1164002
TABLE ACCESS FULL Object owner=PRESTO Object name=T_BRIDGELOG_BLG Cost=1490 Cardinality=12383 Bytes=619150
TABLE ACCESS BY INDEX ROWID Object owner=PRESTO Object name=ANNONCE Cost=2 Cardinality=1 Bytes=44
INDEX UNIQUE SCAN Object owner=PRESTO Object name=PK_ANNONCE Cost=1 Cardinality=1
table ANNONCE environs 5 millions de lignes
table BLG = 830 000 lignes

Index en pk sur id_annonce
Index sur id_presto
Index sur trunc(blg_date)

Le temps d'execution est d'environs 40 sec.

1/ Comment puis-je l'optimiser ?

2/ Comment se lit le plan d'execution, où puis-je trouver une doc là dessus ?

Merci d'avance pour votre aide