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.
table1.ref_field
référençant le PK de la deuxième table (table2.id
)table1.ref_field
Est-ce la meilleure façon d'organiser ces index, clés primaires et étrangères?
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: