Índices B-Tree e como eles ajudam
O que um índice realmente armazena e quais operações ele acelera.
Índices B-Tree e como eles ajudam é uma aula grátis de SQL Interview Prep 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 Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Interview Prep inclui 4 aulas no total.
Por que os entrevistadores perguntam sobre índices
Quando um entrevistador diz 'esta consulta está lenta; como você procede?', a resposta que ele quase sempre espera envolve um índice. Os índices são a maior alavanca individual para o desempenho de leitura; por isso, eles distinguem os candidatos que memorizaram a sintaxe daqueles que entendem como um banco de dados realmente encontra as linhas.
Nesta lição, você construirá um modelo mental preciso do índice de árvore B: o que ele armazena, quais operações ele acelera e como falar sobre ele da maneira que um engenheiro sênior falaria.
O problema resolvido por um índice
Sem um índice, encontrar as linhas que correspondem a uma condição força o banco de dados a ler todas as linhas da tabela. Isso é uma varredura sequencial (ou varredura completa da tabela). Em uma tabela com um milhão de linhas, isso significa verificar um milhão de linhas, mesmo que apenas uma corresponda.
Um índice é uma estrutura de dados separada e ordenada que permite ao mecanismo saltar diretamente para as linhas correspondentes, assim como o índice de um livro permite encontrar um tema sem ler todas as páginas.
-- No index: the engine reads ALL rows to find this one
SELECT * FROM users WHERE email = 'ada@example.com';O que uma árvore B realmente armazena
O índice padrão no PostgreSQL, MySQL, SQL Server e na maioria dos mecanismos é uma árvore B (árvore balanceada). Ela armazena os valores da coluna indexada em ordem ordenada, organizados em uma árvore rasa de páginas.
- Cada nó folha contém as chaves do índice e um ponteiro para a linha real da tabela.
- A árvore permanece balanceada, portanto qualquer busca acessa apenas algumas páginas, independentemente do tamanho da tabela.
Uma busca percorre o caminho da raiz até uma folha em aproximadamente log(N) etapas, em vez de varrer todas as N linhas.
Criando seu primeiro índice
Você cria um índice de árvore B com CREATE INDEX. Dê-lhe um nome claro para que um revisor identifique a tabela e as colunas rapidamente.
Depois que esse índice existe, uma consulta que filtra por email pode usá-lo para encontrar a linha correspondente com poucas leituras de páginas, em vez de fazer uma varredura completa.
CREATE INDEX idx_users_email ON users (email);
-- Now this lookup uses the index instead of scanning
SELECT * FROM users WHERE email = 'ada@example.com';Operações aceleradas por uma árvore B
Como uma árvore B mantém os valores ordenados, ela acelera muito mais do que correspondências exatas. Os entrevistadores valorizam quando você lista estas operações com precisão:
- Igualdade:
WHERE email = ? - Intervalo:
WHERE age > 30,BETWEEN,<,>= - Correspondência por prefixo:
WHERE name LIKE 'Ada%'(mas NOT'%da') - ORDER BY na coluna indexada, evitando uma ordenação
- MIN/MAX, pois ficam nas extremidades da estrutura ordenada
Exemplo resolvido: consulta por intervalo
Considere uma tabela de pedidos com milhões de linhas. Uma consulta de relatório solicita os pedidos recentes. Com um índice em created_at, o mecanismo procura o início do intervalo no índice ordenado e avança apenas até onde for necessário.
O índice transforma uma varredura completa da tabela em uma varredura de intervalo limitado, lendo apenas o trecho que atende aos critérios.
CREATE INDEX idx_orders_created_at ON orders (created_at);
SELECT order_id, total
FROM orders
WHERE created_at >= '2026-01-01'
AND created_at < '2026-02-01';Os índices também ajudam na ordenação
Um ponto frequentemente ignorado: como o índice já está ordenado, o mecanismo pode retornar as linhas na ordem do índice e pular uma etapa de ordenação separada. Isso é importante para ORDER BY e especialmente para a paginação dos primeiros N resultados.
Se você ordenar por uma coluna que tem um índice correspondente, o otimizador poderá ler o índice em ordem e parar antecipadamente assim que tiver linhas suficientes.
-- Index on created_at lets this avoid a sort and stop after 10 rows
SELECT order_id, total
FROM orders
ORDER BY created_at DESC
LIMIT 10;O custo oculto: o segundo acesso à tabela
Um índice de árvore B normal armazena apenas a coluna indexada e um ponteiro para a linha. Portanto, depois de encontrar as entradas correspondentes, o mecanismo ainda precisa acessar a tabela (a área de dados) para ler as outras colunas selecionadas.
Esse segundo acesso é barato para poucas linhas, mas caro quando uma consulta corresponde a muitas linhas; esse é um dos motivos pelos quais um índice de baixa seletividade às vezes é ignorado. (Mais adiante, você verá como os índices de cobertura resolvem esse problema.)
Confirmando que o índice é usado
Nunca afirme que um índice é usado; comprove isso com EXPLAIN. Em uma entrevista, narrar o plano demonstra compreensão real.
Seq Scansignifica que o índice NOT foi usado.Index ScanouIndex Seeksignifica que ele foi usado.
Se você adicionou um índice, mas ainda vê uma varredura sequencial, o planejador considerou a varredura mais barata, geralmente porque a consulta corresponde a uma fração grande demais da tabela.
EXPLAIN
SELECT * FROM users WHERE email = 'ada@example.com';
-- Look for: Index Scan using idx_users_emailAs chaves primárias já são indexadas
Uma armadilha comum em entrevistas: declarar uma restrição PRIMARY KEY ou UNIQUE cria automaticamente um índice de árvore B de suporte. Você não precisa, nem deve, adicionar um segundo índice na mesma coluna.
É por isso que as junções e buscas por chaves primárias já são rápidas e que a pergunta 'devo indexar a coluna id?' geralmente é uma armadilha: isso já é feito automaticamente.
-- This already builds a unique B-Tree index on (id)
CREATE TABLE users (
id BIGINT PRIMARY KEY,
email TEXT UNIQUE
);Como formular a resposta na entrevista
Una tudo em uma frase clara que o entrevistador possa acompanhar:
'Um índice de árvore B é uma estrutura ordenada e balanceada que permite ao mecanismo encontrar linhas em leituras de páginas de custo logarítmico log(N), em vez de varrer a tabela inteira. Ele acelera operações de igualdade, intervalo, prefixo e ORDER BY nas colunas indexadas, mas cada correspondência ainda exige um segundo acesso à tabela para obter as colunas que não estão no índice.'
Depois, comprove a afirmação com EXPLAIN. Essa combinação de modelo e evidência é o que rende pontos.
Verificação rápida
Teste seu modelo mental sobre as operações aceleradas por um índice de árvore B.
Recapitulação: índices de árvore B
Principais conclusões para levar à próxima lição:
- Uma árvore B armazena os valores indexados de forma ordenada em uma árvore balanceada, proporcionando buscas em
log(N). - Ela acelera igualdade, intervalo, prefixo (LIKE inicial), ORDER BY e MIN/MAX.
- Cada correspondência ainda exige um segundo acesso à tabela para obter as colunas que não estão no índice.
- Envolver uma coluna em uma função ou usar um caractere curinga inicial desativa o índice.
- Sempre verifique com
EXPLAIN; as restrições PRIMARY KEY e UNIQUE criam índices automaticamente.
A seguir: como ordenar as colunas quando um índice cobre várias delas ao mesmo tempo.
Perguntas Frequentes
A aula “Índices B-Tree e como eles ajudam” é grátis?
Sim — o texto completo de “Índices B-Tree e como eles ajudam” é 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 Interview Prep, atualize para CoddyKit PRO. O curso de SQL Interview Prep inclui 4 aulas no total.
O que vou aprender em “Índices B-Tree e como eles ajudam”?
O que um índice realmente armazena e quais operações ele acelera. Você pratica SQL Interview Prep 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 Interview Prep?
Nenhuma experiência prévia é necessária. SQL Interview Prep 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 e como eles ajudam”?
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 Interview Prep?
Sim. Cada aula de SQL Interview Prep 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
- Índices B-Tree e como eles ajudam
- Ordem das colunas em índices compostos
- Índices de cobertura e varreduras somente de índice
- Quando os índices prejudicam: gravações e seletividade