Ummon | Bonjour !
Alors voila un problème très simple a présenter mais que je ne comprends absolument pas.
Sur une base de données PostgreSQL (8.1.3) vierge je crée deux tables :
Code :
- CREATE TABLE A
- (
- id int,
- nom varchar(200),
- primary key(id)
- );
- CREATE TABLE B
- (
- id int,
- nom varchar(200),
- a int,
- FOREIGN KEY(a) REFERENCES A ON DELETE SET NULL,
- PRIMARY KEY(id)
- );
- CREATE INDEX b_a_INDEX on B(a);
|
Puis j'ajoute quelques valeurs :
Code :
- insert into A (id, nom) VALUES (1, 'A1');
- insert into A (id, nom) VALUES (2, 'A2');
- insert into B (id, nom, a) VALUES (1, 'B1', 1);
- insert into B (id, nom, a) VALUES (2, 'B2', 2);
- insert into B (id, nom, a) VALUES (3, 'B3', NULL);
|
Et finalement j'execute une requête avec EXPLAIN car c'est justement de l'utilisation des indexes que vient mon problème.
Code :
- EXPLAIN SELECT
- A.nom, B.nom
- FROM A INNER JOIN B ON B.a = A.id
|
J'obtiens :
Code :
- Hash Join (cost=16.50..39.47 rows=510 width=236)
- Hash Cond: ("outer".a = "inner".id)
- -> Seq Scan on b (cost=0.00..15.10 rows=510 width=122)
- -> Hash (cost=15.20..15.20 rows=520 width=122)
- -> Seq Scan on a (cost=0.00..15.20 rows=520 width=122)
|
Comme on peut le voir il fait deux "Seq Scan" ce qui à mon avis n'est pas normal à cause des indexes.
Quelqu'un aurait une explication ? ... Peut être que la réponse est RTFM!
Merci d'avance ! Message édité par Ummon le 20-10-2006 à 15:20:04
|