Sobes.tech
Middle

Quais são os tipos de índices no PostgreSQL?

sobes.tech IA

Resposta da IA

Existem os seguintes tipos principais de índices:

  1. B-tree (Árvore B) - o tipo mais comum, adequado para a maioria das consultas típicas (igualdade, comparação, intervalo). Baseado numa árvore balanceada.

  2. Hash (Hash) - usado para verificar igualdade (=). Mais rápido que B-tree para essas consultas, mas não suporta comparações nem intervalos. Armazena o valor hash da chave e um ponteiro para a linha.

  3. GiST (Árvore de Pesquisa Generalizada) - estrutura de árvore de pesquisa generalizada que permite construir diferentes índices para tipos de dados complexos (geométricos, textuais com pesquisa de texto completo). Baseado numa árvore balanceada.

  4. SP-GiST (Árvore de Pesquisa Generalizada Particionada por Espaço) - versão especializada do GiST para dados que podem ser divididos por espaço (por exemplo, pontos, retângulos). Exemplos: árvores k-d, quadtrees.

  5. GIN (Índice Invertido Generalizado) - índice invertido generalizado, principalmente para procurar elementos dentro de valores compostos (por exemplo, arrays, JSONB). Frequentemente usado para pesquisa de texto completo.

  6. BRIN (Índice de Intervalo de Blocos) - índice de intervalo de blocos. Adequado para tabelas muito grandes com dados ordenados naturalmente (por exemplo, por tempo). Indexa o intervalo de valores em blocos físicos do disco.

  7. Bloom (Filtro de Bloom) - não é um índice tradicional, mas uma estrutura de dados probabilística para verificar rapidamente a ausência de um elemento. Usado para acelerar a seleção de tabelas muito grandes quando a correspondência exata não é necessária ou como filtro adicional antes de escanear o índice principal.

Exemplos de uso:

  • B-tree: índice em campos numéricos, datas, strings para pesquisa por intervalo (WHERE amount > 100).
  • Hash: raramente usado diretamente, pois o B-tree costuma ser mais rápido para a maioria das tarefas.
  • GiST: índices geoespaciais (gist(location)), índices para pesquisa de texto completo (to_tsvector).
  • SP-GiST: índices para dados bidimensionais (spgist(point)).
  • GIN: índices para arrays (gin(tags)), JSONB (gin(data)), pesquisa de texto completo.
  • BRIN: índice no campo timestamp em tabelas de logs, onde os dados estão ordenados por tempo.
  • Bloom: índice em um conjunto de colunas (bloom(col1, col2, col3)) para descartar rapidamente linhas onde a combinação de valores não está presente.

A escolha do tipo de índice depende do tipo de dados da coluna e do tipo de consultas que se deseja otimizar.