Bonjour


Oracle 9ir2
J’ai une requête de 2 tables A et B dont B est vide j’ai calculé les stats sur les 2 mais
Le plan d’exécution fait toujours un acces_full sur la table B malgré qu’il y ait un index sur cette table(b). voici ma requete :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  SELECT A.RCA_ID AS Rca_1d,
         A.RCA_2 AS Rc_2,
         A.RC3 AS RC3,        	       
         A.RC_4 AS RRC_4,
         A.RC_5 AS RRC_5
        FROM A  , B 
        WHERE 
              A.RCA_ID = B.RCA_ID (+)
              AND A.col1 = 1
              AND A.col2 = 1
              AND A.col3 = &pPosDate
              AND A.col4 = 'A'
              AND ROWNUM = 1         
              ORDER BY B.col_date DESC

Voici son plan d’execution:



SELECT STATEMENT, GOAL = CHOOSE Cost=1985 Cardinality=1 Bytes=83
SORT ORDER BY Cost=1985 Cardinality=1 Bytes=83
COUNT STOPKEY
HASH JOIN OUTER Cost=1984 Cardinality=1 Bytes=83
TABLE ACCESS BY INDEX ROWID Object name=A Cost=2 Cardinality=1 Bytes=35
INDEX RANGE SCAN Object name=INN_A _col_1 Cost=2 Cardinality=1
TABLE ACCESS FULL Object name=B Cost=1982 Cardinality=1 Bytes=48


table A

(col1, col2, col3, col4) ---> index concatené table A

RCA_ID-----> pk indexée aussi

Table b

RRPP.col_date -----> index seul de la table b

Le problème il fait un acces full sur la table B malgré que l’index est crée

J’ai vérifié si l’index est ignoré dans les cas de conversion implicite ,valeur nulle, etc, mais c pas le cas ? pourriez vous m’orientez svp ? pour ne pas faire acces full sur B

Merci de votre aide