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

Diferença entre o índice GiST e GIN


Acho que não poderia explicar melhor do que o manual já explica:

Ao escolher qual tipo de índice usar, GiST ou GIN, considere estas diferenças de desempenho:

  • As pesquisas de índice GIN são cerca de três vezes mais rápidas que o GiST

  • Índices GIN demoram cerca de três vezes mais para serem construídos do que GiST

  • Os índices GIN são moderadamente mais lentos para atualizar do que os índices GiST, mas cerca de 10 vezes mais lentos se o suporte de atualização rápida estiver desabilitado [...]

  • Os índices GIN são duas a três vezes maiores que os índices GiST

Link e cotação referem-se ao manual do Postgres 9.4. As estimativas de tamanho e desempenho já pareciam um pouco desatualizadas. Com o Postgres 9.4, as chances mudaram substancialmente em favor do GIN .
As notas de lançamento do Postgres 9.4 incluem:

  • Reduzir o tamanho do índice GIN (Alexander Korotkov, Heikki Linnakangas) [...]

  • Melhore a velocidade de pesquisas de GIN multi-chave (Alexander Korotkov, HeikkiLinnakangas)

As estimativas de tamanho e desempenho foram removidas do manual.

Observe que existem casos de uso especiais que exigem um ou outro.

Uma coisa que você não entendeu:você nunca obter resultados errados com um índice GiST. O índice opera em valores de hash, que podem levar a falsos positivos no índice. Isso só deve se tornar relevante com um número muito grande de palavras diferentes em seus documentos. Os falsos positivos são eliminados depois de verificar novamente a linha real em qualquer caso. O manual:

Um índice GiST tem perdas, o que significa que o índice pode produzir falsas correspondências, e é necessário verificar a linha real da tabela para eliminar essas falsas correspondências. (O PostgreSQL faz isso automaticamente quando necessário. )

Minha ênfase em negrito.