Bonjour à tous,
Configuration : Oracle 9i Entreprise version 9.2.0.7.0
Voilà pour les présentations, maintenant mon problème :
Je suis en train d'optimiser des requêtes par l'analyse du plan d'exécution (avec Toad) et création des index qui vont bien.
Seulement pour les jointures suivantes j'ai toujours des "TABLE ACCESS FULL" :
Et voici une partie de l'explain plan (celle avec les access full) :
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29 SELECT * FROM (((((((MAPL INNER JOIN PLKO ON (MAPL.PLNTY = PLKO.PLNTY) AND (MAPL.PLNNR = PLKO.PLNNR) AND (MAPL.PLNAL = PLKO.PLNAL)) INNER JOIN PLAS ON (PLKO.PLNTY = PLAS.PLNTY) AND (PLKO.PLNNR = PLAS.PLNNR) AND (PLKO.PLNAL = PLAS.PLNAL)) INNER JOIN PLPO ON (PLAS.PLNTY = PLPO.PLNTY) AND (PLAS.PLNNR = PLPO.PLNNR) AND (PLAS.PLNKN = PLPO.PLNKN)) LEFT OUTER JOIN CRHD ON (PLPO.ARBID = CRHD.OBJID)) WHERE MAPL.DATUV <= '99991231' AND PLKO.DATUV <= '99991231' AND PLAS.DATUV <= '99991231' AND PLPO.DATUV <= '99991231' ORDER BY MAPL.MATNR, MAPL.WERKS, PLAS.PLNTY, PLAS.PLNNR, PLAS.PLNAL, PLAS.PLNKN, MAPL.DATUV DESC, PLKO.DATUV DESC, PLAS.DATUV DESC, PLPO.DATUV DESC
NESTED LOOPS 1 273 790
- HASH JOIN 61 8 K 668
-- HASH JOIN 1 K 233 K 471
--- TABLE ACCESS FULL PLKO 16 K 1 M 50
--- TABLE ACCESS FULL MAPL 89 K 3 M 154
-- TABLE ACCESS FULL PLAS 102 K 2 M 138
- TABLE ACCESS BY INDEX ROWID ADMOASIS.PLPO 1 124 2
-- INDEX RANGE SCAN ADMOASIS.idx_PLPO_KN 1 1
J'ai pourtant créé des index sur MAPL (PLNTY, PLNNR, PLNAL), PLKO (PLNTY, PLNNR, PLNAL), PLAS (PLNTY, PLNNR, PLNAL) + (PLNTY, PLNNR, PLNKN)
Idem pour PLPO avec (PLNTY, PLNNR, PLNKN) qui est bien accédée par Index Rowid
Pouvez-vous me dire pourquoi PLKO et PLAS sont toujours lues en full ??
Merci d'avance !
Yannick
Partager