web-dev-qa-db-fra.com

Besoin d'index sur les clés étrangères

Je me bats avec les index, les clés primaires et les clés étrangères ... Et la nécessité de les avoir tous.

Si j'ai deux tables, les deux ont un entier comme clé primaire.
La première table fait référence via un FK à la clé primaire de la deuxième table.

  • Sur les deux tables, j'ai un index de clé primaire sur la colonne ID
  • J'ai créé une contrainte FK sur le table1.ref_field référençant le PK de la deuxième table (table2.id)
  • et j'ai ajouté un index sur table1.ref_field

Est-ce la meilleure façon d'organiser ces index, clés primaires et étrangères?

33
stUrb

Votre design est bon. Si vous rencontrez un problème de performances (que vous ne pouvez pas connaître au moment du design), vous devez créer un index sur la colonne table1.ref_field, dans le même ordre (ASC) que la colonne table2.id. Cela améliorera les performances des jointures entre celles-ci et les tables/colonnes. Il y a des frais généraux pour maintenir n'importe quel indice, donc vous voulez peser ce coût contre l'avantage d'une performance améliorée.

PostgreSQL ne crée pas automatiquement de tels index sur les colonnes de clés étrangères qui référencent d'autres colonnes, malheureusement, vous devez donc le faire vous-même.

Voici une question StackOverflow sur le même sujet:

Postgres et index sur les clés étrangères et les clés primaires

Voici une requête pour vous aider à déterminer où vous pourriez bénéficier de l'ajout d'un tel index:

Postgresql: Index sur les clés étrangères

32
peterk411