PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Postgres e índices em chaves estrangeiras e chaves primárias


O PostgreSQL cria índices automaticamente em chaves primárias e restrições exclusivas, mas não no lado de referência de relacionamentos de chave estrangeira.

Quando o Pg cria um índice implícito, ele emitirá um NOTICE -level mensagem que você pode ver em psql e/ou os logs do sistema, para que você possa ver quando isso acontece. Os índices criados automaticamente ficam visíveis em \d saída para uma tabela, também.

A documentação sobre índices exclusivos diz:

O PostgreSQL cria automaticamente um índice para cada restrição exclusiva e restrição de chave primária para impor exclusividade. Assim, não é necessário criar um índice explicitamente para colunas de chave primária.

e a documentação sobre restrições diz:

Como um DELETE de uma linha da tabela referenciada ou um UPDATE de uma coluna referenciada exigirá uma varredura da tabela de referência para linhas correspondentes ao valor antigo, geralmente é uma boa ideia indexar colunas de referência. Como isso nem sempre é necessário e há muitas opções disponíveis sobre como indexar, a declaração de uma restrição de chave estrangeira não cria automaticamente um índice nas colunas de referência.

Portanto, você mesmo deve criar índices em chaves estrangeiras, se desejar.

Observe que se você usar chaves estrangeiras primárias, como 2 FKs como PK em uma tabela M-para-N, você terá um índice no PK e provavelmente não precisará criar nenhum índice extra.

Embora geralmente seja uma boa ideia criar um índice em (ou incluir) suas colunas de chave estrangeira do lado de referência, isso não é necessário. Cada índice adicionado torna as operações DML um pouco mais lentas, então você paga um custo de desempenho em cada INSERT , UPDATE ou DELETE . Se o índice é raramente usado, pode não valer a pena.