Pergunta

O que quero dizer é: uma tabela com 20 colunas se beneficia mais com a indexação de um determinado campo (usado em consultas de pesquisa) do que uma tabela que possui apenas 4 colunas?

Além disso: qual é o mal em adicionar índice aos campos com os quais não procuro muito, mas pode mais tarde no futuro? Existe um negativo para adicionar índices? É apenas o tamanho que ele ocupa no disco ou pode tornar as coisas mais lentas para adicionar índices desnecessários?

extraído de um comentário

Estou usando o PostGres (versão mais recente) e tenho uma tabela que farei muitas consultas tipo tipo, etc., mas os valores, sem dúvida, mudarão com frequência, pois meus clientes têm acesso ao CRUD. Devo a ideia de índices? Eles são apenas uma dor de cabeça?

Foi útil?

Solução

Uma tabela com 20 colunas se beneficia mais da indexação de um determinado campo (usado em consultas de pesquisa) do que uma tabela que possui apenas 4 colunas?

Não, o número de colunas em uma tabela não tem influência nos benefícios de ter um índice.

Um índice está exclusivamente nos valores nas colunas (s) especificadas (s); É a frequência dos valores que afetarão quanto benefício suas consultas verão. Por exemplo, uma coluna que contém um valor booleano é uma opção ruim para a indexação, porque é uma chance de 50/50, o valor será um ou o outro valor. Em uma divisão de 50/50 sobre todas as linhas, o índice não restringe a busca por uma linha específica.

Qual é o mal em adicionar índice aos campos com os quais não procuro muito, mas pode mais tarde no futuro?

Os índices apenas aceleram a recuperação de dados quando podem ser usados, mas afetam negativamente a velocidade das instruções Inserir/Atualizar/Excluir. Os índices também exigem manutenção para manter seu valor.

Outras dicas

Se você está fazendo consultas, pode achar que os índices não são de maneira alguma. Embora um índice possa melhorar esta consulta ...

select * from t23
where whatever like 'SOMETHING%'
/

... É improvável que um índice ajude com qualquer uma dessas consultas ...

select * from t23
where whatever like '%SOMETHING%'
/

select * from t23
where whatever like '%SOMETHING'
/

Se você tiver campos de texto gratuitos e seus usuários precisam de correspondência difusa, verifique a funcionalidade de texto completo do Postgres. Isso emprega o operador de correspondência em vez de como e que requer um tipo de índice especial. Descubra mais.

Há um gotcha, que é que os índices de texto completos são mais complicados do que os normais, e o As decisões de design relacionadas não são simples. Também algumas implementações exigem atividades de manutenção adicionais.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top