Ordem das colunas em índices compostos
A regra do prefixo mais à esquerda e como escolher a ordem correta das colunas para uma carga de trabalho.
Ordem das colunas em índices compostos é uma aula grátis de SQL Interview Prep no CoddyKit. Esta é a aula 2 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.
A questão do índice composto
Quando você já consegue explicar um índice de uma única coluna, os entrevistadores aumentam o nível da pergunta: 'Você consulta pelo id do cliente e pela data do pedido ao mesmo tempo. Como indexaria isso?' A resposta esperada é um índice composto (de várias colunas) e uma justificativa para a ordem das colunas.
Esta lição ensina a regra do prefixo mais à esquerda, a única ideia que explica praticamente toda pergunta sobre índices compostos que você receberá.
O que é um índice composto
Um índice composto indexa várias colunas como uma tupla ordenada. As entradas são ordenadas primeiro pela primeira coluna, depois pela segunda entre os empates, e assim por diante, exatamente como uma lista telefônica ordenada pelo sobrenome e depois pelo nome.
A ordem é extremamente importante, porque a prioridade da ordenação segue a ordem das colunas que você declara.
CREATE INDEX idx_orders_cust_date
ON orders (customer_id, order_date);A regra do prefixo mais à esquerda
A regra fundamental é: um índice composto em (A, B, C) pode ser usado por consultas que filtram um prefixo mais à esquerda dessas colunas:
Asozinho, simA, B, simA, B, C, simBsozinho, NOB, C, NO
Pense na lista telefônica: você pode encontrar todas as pessoas de sobrenome 'Smith', mas não consegue encontrar com eficiência todas as pessoas cujo nome é 'John', independentemente do sobrenome, porque o livro não está ordenado dessa maneira.
Exemplo resolvido: correspondências de prefixo
Com o índice em (customer_id, order_date), estas consultas podem usá-lo porque começam com customer_id:
A primeira usa apenas a coluna inicial. A segunda usa ambas, restringindo primeiro por customer_id e depois procurando dentro das entradas ordenadas por data desse cliente.
-- Uses the index (leading column)
SELECT * FROM orders WHERE customer_id = 42;
-- Uses the index fully (both columns, in order)
SELECT * FROM orders
WHERE customer_id = 42
AND order_date >= '2026-01-01';Exemplo resolvido: o prefixo que não corresponde
Esta consulta filtra apenas pela segunda coluna, portanto o índice em (customer_id, order_date) geralmente não pode conduzir a busca: as entradas não estão ordenadas globalmente por order_date.
Se filtrar apenas por order_date for um padrão comum, você precisará de um índice separado que comece por order_date.
-- Does NOT use idx_orders_cust_date efficiently
SELECT * FROM orders
WHERE order_date >= '2026-01-01';
-- Fix: an index that leads with order_date
CREATE INDEX idx_orders_date ON orders (order_date);Igualdade antes do intervalo
Um refinamento de nível sênior: coloque as colunas usadas com igualdade (=) antes das colunas usadas com um intervalo (<, >, BETWEEN). Depois que o índice chega a uma coluna de intervalo, ele não pode mais usar as colunas seguintes para restringir a busca.
Para uma consulta como status = 'paid' AND created_at > ?, a ordem correta é (status, created_at), e não o inverso.
-- Query: WHERE status = 'paid' AND created_at > '2026-01-01'
-- Good: equality column first
CREATE INDEX idx_orders_status_created
ON orders (status, created_at);Escolhendo a coluna inicial
Como escolher qual coluna vem primeiro? Os entrevistadores esperam uma resposta baseada na carga de trabalho:
- Comece pela coluna que aparece no maior número de consultas, especialmente como filtro de igualdade.
- Prefira uma coluna com alta seletividade (muitos valores distintos), para que a primeira etapa elimine o maior número de linhas.
- Considere as necessidades de ORDER BY: corresponder à ordem do índice pode evitar uma ordenação.
A coluna inicial é aquela que realiza o trabalho mais pesado de filtragem no conjunto real das suas consultas.
O índice composto também ajuda na ordenação
Um índice composto também atende a ORDER BY em um prefixo mais à esquerda. Como as entradas são ordenadas por customer_id e depois por order_date, uma consulta pelos pedidos de um cliente, ordenados por data, é praticamente gratuita: não é necessária uma ordenação separada.
-- No sort step: the index already supplies this order
SELECT * FROM orders
WHERE customer_id = 42
ORDER BY order_date;Não acumule índices redundantes
Os candidatos costumam criar índices em excesso. Se você já tem (customer_id, order_date), um índice separado apenas em (customer_id) geralmente é redundante: o índice composto já atende às consultas pela coluna inicial.
Cada índice adicional ocupa armazenamento e torna as gravações mais lentas; portanto, o objetivo é o menor conjunto de índices que cubra seus padrões de consulta, e não um índice por coluna.
Comprovando com EXPLAIN
Como sempre, confirme a escolha do planejador. Depois de criar um índice composto, execute EXPLAIN e verifique se ele aparece como uma varredura por índice e quantas linhas ele estima.
Se uma consulta cujo prefixo não corresponde voltar a uma varredura sequencial, essa será a evidência de que a ordem das colunas não se ajusta à carga de trabalho, exatamente o que você explicaria ao entrevistador.
EXPLAIN
SELECT * FROM orders
WHERE customer_id = 42
AND order_date >= '2026-01-01';Como formular a resposta na entrevista
Uma frase de resumo precisa:
'Um índice composto é ordenado pelas suas colunas da esquerda para a direita; por isso, ele pode atender a qualquer prefixo mais à esquerda dessas colunas, mas não a um subconjunto final. Eu começo pela coluna que realiza mais filtragem e tem alta seletividade, coloco os predicados de igualdade antes dos predicados de intervalo e, quando possível, correspondo a ORDER BY; depois, verifico com EXPLAIN.'
Verificação rápida
Aplique a regra do prefixo mais à esquerda.
Recapitulação: ordem do índice composto
Principais conclusões:
- Um índice composto é ordenado da esquerda para a direita; ele atende apenas a um prefixo mais à esquerda de suas colunas.
- Coloque primeiro a coluna mais consultada e de alta seletividade.
- Coloque as colunas de igualdade antes das colunas de intervalo.
- Um prefixo correspondente também pode atender a
ORDER BYsem uma ordenação adicional. - Evite índices de uma única coluna redundantes que já sejam cobertos por um índice composto e verifique com
EXPLAIN.
A seguir: índices de cobertura que eliminam completamente a busca no heap.
Perguntas Frequentes
A aula “Ordem das colunas em índices compostos” é grátis?
Sim — o texto completo de “Ordem das colunas em índices compostos” é 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 “Ordem das colunas em índices compostos”?
A regra do prefixo mais à esquerda e como escolher a ordem correta das colunas para uma carga de trabalho. 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 2 de 4.
Quanto tempo leva a aula “Ordem das colunas em índices compostos”?
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