Jointures et Indexes [PostgreSQL] - SQL/NoSQL - Programmation
MarshPosté le 20-10-2006 à 14:56:13
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!
Marsh Posté le 20-10-2006 à 14:56:13
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 :
Puis j'ajoute quelques valeurs :
Et finalement j'execute une requête avec EXPLAIN car c'est justement de l'utilisation des indexes que vient mon problème.
J'obtiens :
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