SQL Academy · Aula

Índices B-tree vs Hash vs GiST vs GIN

Compare os principais tipos de índice no PostgreSQL e escolha o mais adequado para consultas de igualdade, intervalo, geometria, JSON e texto completo.

Aula 1 de 413 etapas

Índices B-tree vs Hash vs GiST vs GIN é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.

Visão Geral dos Tipos de Índice

PostgreSQL tem vários tipos de índice, cada um otimizado para diferentes padrões de acesso:

  • Árvore B — igualdade e intervalo (padrão)
  • Hash — apenas igualdade
  • GiST — geométrico, texto completo e personalizado
  • GIN — valores compostos (matrizes, JSONB e texto completo)
  • BRIN — intervalo de blocos — tabelas enormes e ordenadas
  • SP-GiST — árvores particionadas por espaço

Árvore B: o Padrão

Usada em 95% dos casos. É compatível com =, <, <=, >, >=, BETWEEN, ORDER BY:

CREATE INDEX users_email_idx ON users(email);
CREATE INDEX orders_created_at_idx ON orders(created_at DESC);

Índice Hash

Apenas buscas por igualdade. Seguro contra falhas desde PG 10. Menor e um pouco mais rápido que uma árvore B para igualdade pura, mas com uso muito específico:

CREATE INDEX sessions_token_hash ON sessions USING HASH (token);
-- Useful for very high-cardinality equality lookups; usually B-tree is fine.

Índice GiST

Árvore de Busca Generalizada — conectável e compatível com tipos de intervalo, tipos geométricos, endereços IP e texto completo:

CREATE INDEX events_during_idx ON events USING GIST (during);
-- 'during' is a tstzrange — finds overlapping ranges efficiently.

CREATE INDEX places_location_idx ON places USING GIST (location);
-- PostGIS geometry — nearest neighbour, intersects.

Índice GIN

Índice Invertido Generalizado — ideal para valores compostos em que cada item corresponde a muitas linhas:

CREATE INDEX articles_tags_gin ON articles USING GIN (tags);
-- tags is TEXT[]; query with @> or && operators

CREATE INDEX articles_doc_gin ON articles USING GIN (search_doc);
-- For tsvector full-text search

CREATE INDEX events_data_gin ON events USING GIN (data jsonb_path_ops);
-- For JSONB containment queries

Índice BRIN

Os índices de intervalo de blocos resumem intervalos de valores a cada N páginas. São minúsculos (quilobytes para tabelas de terabytes), mas só são eficazes quando os dados estão ordenados fisicamente pela coluna indexada:

CREATE INDEX events_ts_brin ON events USING BRIN (ts);
-- Excellent for append-only time-series tables.

Comparando Tamanhos

Para uma tabela com um bilhão de linhas:

  • Árvore B em um BIGINT: ~30 GB
  • BRIN em um TIMESTAMPTZ: ~1 MB

BRIN é muito menor, mas só supera a árvore B em consultas sequenciais ou ordenadas.

Escolhendo um Tipo de Índice

Fluxo de decisão:

  • Igualdade + intervalo em um valor escalar → árvore B
  • Igualdade em um conjunto escalar enorme → árvore B (Hash somente após medições)
  • Matrizes / JSONB / texto completo → GIN
  • Tipos de intervalo, geometria e texto aproximado → GiST
  • Tabela enorme e ordenada, somente com acréscimos → BRIN

Compromissos do GIN

GIN é o mais rápido para consultas do tipo "encontre todas as linhas que contêm X", mas é mais lento para INSERT/UPDATE que uma árvore B. Para tabelas com muitas escritas, considere fastupdate=off para controlar a lista pendente do GIN.

Classes de Operadores

Cada tipo de índice funciona com operadores específicos. JSONB usa jsonb_path_ops para índices menores e mais rápidos, somente para contenção:

CREATE INDEX e_data_gin ON events USING GIN (data jsonb_path_ops);
-- Half the size of default jsonb_ops, supports @> only.

Índices Compostos por Tipo

Índices compostos de árvore B usam correspondência pelo prefixo mais à esquerda. Índices compostos GIN funcionam, mas são maiores; geralmente você cria índices GIN separados de uma única coluna.

Recapitulação

Escolha o tipo de índice adequado à consulta.

  • Árvore B: padrão
  • GIN: matrizes/JSONB/texto completo
  • GiST: intervalos/geometria/aproximação
  • BRIN: sequencial/somente com acréscimos

Verificação Rápida

Você está indexando uma coluna TEXT[] para consultas de "contém". Qual tipo de índice é adequado?

Grátis para começar

Aprenda SQL com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
46
Aulas
183

Perguntas Frequentes

A aula “Índices B-tree vs Hash vs GiST vs GIN” é grátis?

Sim — o texto completo de “Índices B-tree vs Hash vs GiST vs GIN” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.

O que vou aprender em “Índices B-tree vs Hash vs GiST vs GIN”?

Compare os principais tipos de índice no PostgreSQL e escolha o mais adequado para consultas de igualdade, intervalo, geometria, JSON e texto completo. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar SQL Academy?

Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Índices B-tree vs Hash vs GiST vs GIN”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de SQL Academy?

Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Índices B-tree vs Hash vs GiST vs GIN
  2. Índices compostos e ordem das colunas
  3. Índices parciais e de expressão
  4. Manutenção de índices e fragmentação
← Voltar para SQL Academy