Quais são os tipos de índices no PostgreSQL?
sobes.tech IA
Resposta da IA
Existem os seguintes tipos principais de índices:
-
B-tree (Árvore B) - o tipo mais comum, adequado para a maioria das consultas típicas (igualdade, comparação, intervalo). Baseado numa árvore balanceada.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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
timestampem 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.