PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 15/03/2017 11:15:35

Tanite
Membre

Index pour une cle étrangère

Bonjour
Je reviens vers vous pour savoir si il est nécessaire de créer des index sur les cles étrangères ?
Sous Oracle il est recommande de créer les index, même chose pour PostgreSQL ?
Y a t'il des impacte de perf ?

Merci d'avance

Tanite

Hors ligne

#2 15/03/2017 12:22:30

gleu
Administrateur

Re : Index pour une cle étrangère

Oui, il est recommandé de créer des index pour faciliter/accélérer les recherches sur les clés étrangères. L'impact est très positif pour ces recherches, et est négatif pour les écritures, comme tout autre index.


Guillaume.

Hors ligne

#3 15/03/2017 20:11:38

Tanite
Membre

Re : Index pour une cle étrangère

OK, merci pour votre aide !

Hors ligne

#4 20/03/2017 17:09:45

Re : Index pour une cle étrangère

Bonjour,
Lorsque l'on supprime un enregistrement de la table père, PostgreSQL cherche à savoir s'il existe des enregistrements fils :
select x from table_fille
where id_fk_pere = 'enregistrement père en cours de suppression'

S'il n'y a pas d'index sur id_fk_pere (la colonne de la foreign key), on part pour un sequential scan sur la table fille (mais on ne le voit pas, car cela doit être un ordre généré).
S'il y a un index, on l'utilise.

A moins d'envisager de ne jamais purger d'enregistrements, il me semble que l'on ne peut pas se passer d'index sur les FK.

Test ici avec une table père de 1.509.619 et une table fille de 2.125.573 enregistrements.
-- avec INDEX DE FK :
idev00=>  delete from  zzjournacl_fred where zzjoidfsys=5003866907;
DELETE 1
Temps : 1,738 ms
-- sans INDEX DE FK :
idev00=>  delete from  zzjournacl_fred where zzjoidfsys=5003866908;
DELETE 1
Temps : 236,130 ms

Hors ligne

Pied de page des forums