Você pode dar mais detalhes sobre Isto?

Afinal, profile_id é uma chave estrangeira, e em muitos bancos de dados relacionais (como o MySQL, por padrão), espera-se que uma coluna usada em uma foreign key seja automaticamente indexada. No PostgreSQL, isso não acontece

Quais muitos? O MySQL é um, tem outros? Na verdade só no InnoDB, porque isso é não uma unanimidade, pode ser ruim em alguns casos.

É compreensível para nós desenvolvedores, presumirmos que definir uma chave estrangeira automaticamente implica em ter um índice para ela

Por que? Pra mim é presumível que não vai criar. De tudo que estudei desde os anos 80, até hoje, em livros dos mais renomados, eu mesmo tendo iniciado um projeto de banco de dados onde tive quer aprender detalhes que quase ninguém estuda, e nunca vi motivo para criar qualquer índice que não seja chave primária de forma automática, mesmo para PK há quem diga que pode ter vantagemem não ser automático e eu tendo a concordar que no mínimo deveria ser opt-out, mas por que não fazer opt-in até para fazer a pessoa pensar sobre com mais cuidado?

Em vários casos a FK não será usada com frequência, especialmente para fazer JOIN e até a PK pode ter casos, especialmente em tabelas pequenas que pode ficar mais caro ter índice, apesar de ser um caso que não fará tanta diferença.

Criar um índice torna toda escrita mais cara e muitas vezes o gargalo do DB é na escrita, então a ideia que nenhum índice ou só a PK deveria ser automático faz sentido.

Eu já vi gente dizendo, e fez, que deveria criar índice para cada oluna, o que não faz sentido algum, até porque a maioria nuca será usado e muitos que precisaria vão continuar não existiundo já que vários índices só tem valor com chaves compostas. A regra é bem simples e me parece imutável, só crie índices que você possa provar que dá um ganho e não deixe de criar nenhum que dá algum ganho. Exceções sempre podem existir em cada contexto.

Sempre precisa saber oque está fazend, até com o MySQL. Claro que o MySQL tem uma filosofia parecida com JS, tenta dar um resultado para o usuário, mesmo que ele seja errado. Programador bom não gosta dessa filosofia. Na verdade, ninguém deveria gostar.

Alguns ORMs criam índice para a FK automaticamente em todos os SGDBs que eles suportarem, eventualmente dependendo do engine que foi feito para ele usar determinado SGDB. Espero que estes pelo menos tenham opt-out, e não ter é mais um motivo para não usar ORM.

Pensar sobre a criação de índices é fundamental.

Ver mais:

S2


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui no perfil também).

Corrigi pra não generalizar, deveria ter pesquisado melhor se realmente era assim nos outros bancos de dados

Minha experiência também vai nessa direção: criar índices sob demanda, de acordo com o perfil de uso da aplicação.