Bonjour,

Suis nouveau. Pas pu trouver de réponse dans une discussion existante.

Je ne comprends pas pourquoi l'Explain Plan utilise un FULL ACCESS sur la table generalite dans cetet requette
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Select * from
  generalite c
  join payeur p on (p.code_payeur=c.code_payeur)
where
  p.code_mode_reglement = 'CA'

Ces tables ont pas mal de lignes. Sur une requette plus complexe, c'est sensible.

Je souhaiterais un accès de ce type :
1 FULL ACCESS sur table payeur (pas le choix, code_mode_reglement n'est pas dans un index)
2 Acces index GENERALITE_INDX4 sur table generalite

Quelle syntaxe SQL utiliser ?

Explain Plan
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Plan
SELECT STATEMENT  ALL_ROWSCost: 22 363  Bytes: 54 558 438  Cardinality: 64 262  		
	3 HASH JOIN  Cost: 22 363  Bytes: 54 558 438  Cardinality: 64 262  	
		1 TABLE ACCESS FULL TABLE BSP.PAYEUR [Analyzed]Cost: 6 358  Bytes: 12 304 092  Cardinality: 25 958  
		2 TABLE ACCESS FULL TABLE BSP.GENERALITE [Analyzed]Cost: 6 174  Bytes: 189 009 000  Cardinality: 504 024
Définition tables (simplifiée)
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
CREATE TABLE GENERALITE
(
  CODE_CLIENT           NUMBER(8)               NOT NULL,
  CODE_PAYEUR           NUMBER(8),
)
 
CREATE UNIQUE INDEX GENERALITE_PK ON GENERALITE (CODE_CLIENT);
CREATE INDEX GENERALITE_INDX4 ON GENERALITE(CODE_PAYEUR)
 
ALTER TABLE GENERALITE ADD (CONSTRAINT GENERALITE_PK PRIMARY KEY (CODE_CLIENT) USING INDEX 
 
CREATE TABLE PAYEUR
(
  CODE_CLIENT             NUMBER(8)             NOT NULL,
  CODE_PAYEUR             NUMBER(8)             NOT NULL,
  CODE_MODE_REGLEMENT     CHAR(4 BYTE),
)
 
CREATE UNIQUE INDEX PAYEUR_PK ON PAYEUR(CODE_CLIENT, CODE_PAYEUR)
CREATE UNIQUE INDEX PAYEUR_INDX6 ON PAYEUR(CODE_PAYEUR)
 
ALTER TABLE PAYEUR ADD ( CONSTRAINT PAYEUR_PK PRIMARY KEY(CODE_CLIENT, CODE_PAYEUR) USING INDEX
ALTER TABLE PAYEUR ADD ( CONSTRAINT PAYEUR_INDX6 UNIQUE (CODE_PAYEUR) USING INDEX
 
ALTER TABLE PAYEUR ADD ( CONSTRAINT PAYEUR_FK2 FOREIGN KEY (CODE_MODE_REGLEMENT) REFERENCES MODE_REGLEMENT (CODE_MODE_REGLEMENT));