Estou lutando com índices, chaves primárias e chaves estrangeiras... E a necessidade de ter todos eles.
Se eu tiver duas tabelas, ambas terão um inteiro como chave primária.
A primeira tabela faz referência por meio de um FK à chave primária da segunda tabela.
- Em ambas as tabelas, tenho um índice de chave primária na coluna ID
- Criei uma restrição FK no
table1.ref_field
referenciamento do PK da segunda tabela (table2.id
) - e eu adicionei um índice em
table1.ref_field
Essa é a melhor maneira de organizar esses índices, chaves primárias e estrangeiras?
Seu projeto é bom. Se você está tendo um problema de desempenho (que você não pode saber em tempo de design), você deve criar um índice na coluna table1.ref_field, na mesma ordem (ASC) da coluna table2.id. Isso melhorará o desempenho nas junções entre as tabelas/colunas. Há sobrecarga para manter qualquer índice, portanto, você deseja comparar esse custo com o benefício de um desempenho aprimorado.
O PostgreSQL não cria automaticamente esses índices em colunas de chave estrangeira que referenciam outras colunas, infelizmente, então você tem que fazer isso sozinho.
Aqui está uma pergunta do StackOverflow sobre o mesmo tópico:
Postgres e índices em chaves estrangeiras e chaves primárias
Aqui está uma consulta para ajudar a determinar onde você pode se beneficiar da adição desse índice:
Postgresql: índices em chaves estrangeiras