Orivel Orivel
Abrir menu

Ensinando índices de banco de dados a um desenvolvedor backend júnior

Compare as respostas dos modelos para esta tarefa de benchmark em Explicação e reveja pontuações, comentários e exemplos relacionados.

Entre ou cadastre-se para usar curtidas e favoritos. Cadastrar

X f L

Índice

Visão geral da tarefa

Gêneros de comparação

Explicação

Modelo criador da tarefa

Modelos participantes

Modelos avaliadores

Enunciado da tarefa

Escreva uma explicação com foco didático para um desenvolvedor backend júnior que conhece a sintaxe básica SQL SELECT, WHERE e JOIN, mas nunca projetou índices de banco de dados intencionalmente. Explique o que é um índice de banco de dados, como ele pode acelerar leituras, por que pode desacelerar escritas e usar armazenamento extra, e como um índice comum B-tree é usado em alto nível. Inclua uma explicação prática sobre seletividade, índices compostos, a ideia do prefixo mais à esquerda (leftmost-prefix), e situa...

Mostrar mais

Escreva uma explicação com foco didático para um desenvolvedor backend júnior que conhece a sintaxe básica SQL SELECT, WHERE e JOIN, mas nunca projetou índices de banco de dados intencionalmente. Explique o que é um índice de banco de dados, como ele pode acelerar leituras, por que pode desacelerar escritas e usar armazenamento extra, e como um índice comum B-tree é usado em alto nível. Inclua uma explicação prática sobre seletividade, índices compostos, a ideia do prefixo mais à esquerda (leftmost-prefix), e situações em que um índice pode não ajudar. Use uma analogia simples, mas também explique diretamente o comportamento real do banco de dados. Inclua dois pequenos exemplos SQL mostrando uma escolha de índice útil e uma escolha de índice menos útil ou problemática. Termine com uma lista de verificação prática e curta que o desenvolvedor possa usar ao decidir se deve adicionar um índice.

Informação complementar

Assuma um banco de dados relacional genérico, como PostgreSQL, MySQL ou SQLite. Evite depender de sintaxe específica do fornecedor ou de detalhes avançados de internals do banco além do necessário para compreensão prática.

Política de avaliação

Uma resposta forte deve ser precisa, clara e bem adaptada a um desenvolvedor backend júnior. Deve explicar índices como estruturas de dados separadas que ajudam o banco de dados a encontrar linhas sem escanear tudo, descrever as compensações entre leitura e escrita, e cobrir corretamente o comportamento de B-tree em alto nível sem complicar demais. Deve tornar seletividade, índices compostos e a ideia do prefixo mais à esquerda compreensíveis por meio de exemplos práticos. Os exemplos SQL devem ser pequenos, coeren...

Mostrar mais

Uma resposta forte deve ser precisa, clara e bem adaptada a um desenvolvedor backend júnior. Deve explicar índices como estruturas de dados separadas que ajudam o banco de dados a encontrar linhas sem escanear tudo, descrever as compensações entre leitura e escrita, e cobrir corretamente o comportamento de B-tree em alto nível sem complicar demais. Deve tornar seletividade, índices compostos e a ideia do prefixo mais à esquerda compreensíveis por meio de exemplos práticos. Os exemplos SQL devem ser pequenos, coerentes e relevantes, e a resposta deve evitar regras enganosas como indexar sempre todas as colunas ou assumir que um índice será sempre usado. A lista de verificação final deve ser acionável e conectar decisões de indexação a padrões reais de consulta, distribuição de dados e custos de manutenção.

Respostas

Entendendo Índices de Banco de Dados: Um Guia Prático

O que é um índice

Um índice de banco de dados é uma estrutura de dados separada que o banco de dados mantém ao lado de uma tabela. Ele armazena os valores de uma ou mais colunas em um formato ordenado e pesquisável, juntamente com ponteiros para as linhas reais. A tabela em si armazena seus dados; o índice é uma estrutura extra cujo único trabalho é ajudar o banco de dados a encontrar linhas mais rapidamente.

Aqui está uma analogia, e é a única que você precisa: um índice é como o índice no final de um livro didático. Se você quiser todas as páginas que men...

Mostrar resposta completa

Entendendo Índices de Banco de Dados: Um Guia Prático

O que é um índice

Um índice de banco de dados é uma estrutura de dados separada que o banco de dados mantém ao lado de uma tabela. Ele armazena os valores de uma ou mais colunas em um formato ordenado e pesquisável, juntamente com ponteiros para as linhas reais. A tabela em si armazena seus dados; o índice é uma estrutura extra cujo único trabalho é ajudar o banco de dados a encontrar linhas mais rapidamente.

Aqui está uma analogia, e é a única que você precisa: um índice é como o índice no final de um livro didático. Se você quiser todas as páginas que mencionam "transações", você não lê o livro inteiro página por página; você procura "transações" no índice ordenado alfabeticamente, obtém uma lista curta de números de página e salta diretamente para elas. Sem esse índice, sua única opção é escanear todas as páginas. Um banco de dados enfrenta exatamente a mesma escolha: usar um índice para saltar para as linhas correspondentes ou escanear a tabela inteira.

Agora o comportamento real, sem a analogia. Quando você executa uma consulta como SELECT * FROM orders WHERE customer_id = 42, o banco de dados tem duas estratégias básicas. Um escaneamento completo da tabela lê cada linha e verifica a condição, o que custa tempo proporcional ao tamanho da tabela. Uma busca de índice, em vez disso, pesquisa a estrutura de índice ordenada para customer_id = 42, encontra as entradas correspondentes rapidamente e segue os ponteiros armazenados para buscar apenas essas linhas. Para uma tabela grande onde apenas algumas linhas correspondem, o caminho do índice pode ser milhares de vezes mais barato.

Como um índice B-tree funciona, em um nível alto

O tipo de índice mais comum é uma B-tree. É uma estrutura de árvore balanceada onde as chaves são mantidas em ordem classificada. O nó superior divide o espaço de chaves em intervalos, cada nó filho subdivide ainda mais, e o nível inferior (as folhas) contém os valores indexados reais com ponteiros para as linhas da tabela. Como a árvore é balanceada e cada nó contém muitas chaves, mesmo uma tabela com centenas de milhões de linhas geralmente precisa de apenas três a cinco leituras de nó para encontrar qualquer valor específico.

Como uma B-tree mantém os valores em ordem classificada, ela suporta mais do que correspondências exatas. Ela lida eficientemente com condições de intervalo (WHERE created_at >= '2024-01-01'), correspondências de prefixo em strings (WHERE email LIKE 'anna%') e pode retornar linhas já classificadas, o que permite que o banco de dados pule uma etapa de classificação separada para cláusulas ORDER BY correspondentes.

Por que os índices custam algo

Os índices não são gratuitos, e este é o trade-off que você deve internalizar.

As gravações ficam mais lentas. Cada INSERT deve adicionar uma entrada a cada índice da tabela. Cada DELETE deve remover entradas. Cada UPDATE que altera uma coluna indexada deve atualizar as entradas de índice correspondentes. Uma tabela com seis índices efetivamente faz até sete gravações para cada inserção de linha lógica. Em tabelas com muitas gravações, a indexação descuidada prejudica mensuravelmente o throughput.

O armazenamento cresce. Cada índice é uma cópia completa dos valores das colunas indexadas mais ponteiros e estrutura de árvore. Índices em tabelas grandes podem rivalizar ou exceder o tamanho da própria tabela, o que também afeta backups e cache de memória.

Portanto, o princípio orientador é: índices trocam custo de gravação e armazenamento por velocidade de leitura. Você os adiciona onde as leituras se beneficiam claramente, não em todos os lugares.

Seletividade: o conceito chave para decidir o valor

Seletividade descreve o quão bem uma condição restringe as linhas. Uma coluna altamente seletiva tem muitos valores distintos em relação à contagem de linhas. Um e-mail ou ID de pedido é altamente seletivo: filtrar nele retorna uma ou um punhado de linhas de milhões, e um índice brilha. Uma coluna como status com três valores ('pendente', 'enviado', 'cancelado') ou um booleano is_active flag tem baixa seletividade: filtrar pode ainda corresponder a 40% da tabela.

Por que isso importa? Se uma condição corresponde a uma grande fração da tabela, saltar para frente e para trás entre o índice e a tabela para milhões de linhas é frequentemente mais lento do que simplesmente escanear a tabela sequencialmente. Planejadores de consulta sabem disso e ignorarão um índice quando a fração de correspondência estimada for muito alta. Como uma intuição aproximada, se uma consulta típica usando o índice retornasse mais de alguns por cento das linhas, o índice pode não ser usado de forma alguma, e é puro overhead.

Índices compostos e a regra do prefixo mais à esquerda

Um índice pode cobrir várias colunas, em uma ordem específica. Por exemplo:

CREATE INDEX idx_orders_customer_date ON orders (customer_id, created_at);

Pense nisso como classificar as entradas primeiro por customer_id, depois por created_at dentro de cada cliente, como uma lista telefônica classificada por sobrenome, depois nome.

A ideia do prefixo mais à esquerda segue diretamente dessa ordem de classificação. Este índice pode servir eficientemente:

  • WHERE customer_id = 42
  • WHERE customer_id = 42 AND created_at >= '2024-01-01'

Mas ele não pode servir eficientemente WHERE created_at >= '2024-01-01' sozinho, porque as entradas para um determinado intervalo de datas estão espalhadas por todos os clientes; você não pode usar uma lista telefônica classificada por sobrenome para encontrar todos chamados "Ana". O índice só é utilizável quando suas condições restringem um prefixo de sua lista de colunas, começando pela coluna mais à esquerda. Isso significa que (customer_id, created_at) e (created_at, customer_id) são índices diferentes servindo consultas diferentes, e a ordem das colunas deve seguir seus padrões de consulta mais importantes. Uma regra geral comum: coloque colunas filtradas por igualdade primeiro, depois a coluna de intervalo ou de classificação.

Quando um índice não ajuda

  • Baixa seletividade: filtrar WHERE is_active = true em uma tabela onde 90% das linhas estão ativas. O planejador fará um escaneamento em vez disso.
  • Funções ou expressões na coluna: WHERE LOWER(email) = 'x@y.com' não pode usar um índice simples em email, porque o índice armazena valores brutos, não transformados. (Alguns bancos de dados suportam índices de expressão, mas o índice simples não será usado.)
  • Wildcards iniciais: WHERE name LIKE '%son' não pode usar uma B-tree, porque a ordem classificada só ajuda quando o prefixo é conhecido.
  • Pular a coluna mais à esquerda de um índice composto, como descrito acima.
  • Tabelas minúsculas: para algumas centenas de linhas, um escaneamento já é rápido; o índice adiciona custo de gravação sem benefício.
  • Incompatibilidades de tipo ou conversões implícitas na coluna indexada também podem impedir o uso do índice.

Dois pequenos exemplos

Um índice útil. Suponha que sua aplicação execute constantemente:

SELECT id, total, created_at
FROM orders
WHERE customer_id = 42
ORDER BY created_at DESC
LIMIT 20;

Então este índice se encaixa perfeitamente:

CREATE INDEX idx_orders_customer_date ON orders (customer_id, created_at);

O banco de dados salta para as entradas do cliente 42, que já estão classificadas por created_at, lê as 20 mais recentes e para. É rápido em uma tabela de qualquer tamanho, e também serve buscas simples por customer_id graças ao prefixo mais à esquerda.

Um índice problemático. Suponha que você crie em vez disso:

CREATE INDEX idx_orders_status ON orders (status);

onde status tem três valores possíveis e a maioria das linhas são 'enviado'. Uma consulta como SELECT * FROM orders WHERE status = 'enviado' corresponde à maior parte da tabela, então o planejador fará um escaneamento da tabela de qualquer maneira. O índice raramente ou nunca é usado, mas cada inserção e cada atualização de status paga para mantê-lo. Isso é uma perda líquida. (Uma exceção que vale a pena saber: indexar uma coluna de baixa cardinalidade pode valer a pena quando um valor é raro e consultado intensamente, como o pequeno conjunto de pedidos 'pendentes', mas a versão genérica acima é um erro clássico.)

Checklist prático antes de adicionar um índice

  1. Identifique a consulta lenta real primeiro; não indexe especulativamente. Olhe para os padrões de consulta reais e use EXPLAIN para ver o plano atual.
  2. Verifique a seletividade: consultas típicas usando este índice retornarão uma pequena fração da tabela? Se não, reconsidere.
  3. Para filtros e classificações de várias colunas, projete um índice composto com a ordem correta das colunas (colunas de igualdade primeiro, depois colunas de intervalo/classificação) em vez de vários índices de coluna única.
  4. Confirme a regra do prefixo mais à esquerda: sua consulta mais comum restringe a primeira coluna do índice?
  5. Certifique-se de que a consulta não anule o índice com funções, wildcards iniciais ou conversões de tipo na coluna indexada.
  6. Pondere o tráfego de gravação: em tabelas com muitas gravações, cada índice extra tem um custo real. Remova índices que se sobrepõem ou são prefixos de outros.
  7. Verifique se um índice existente já cobre a consulta antes de criar um novo.
  8. Após criar o índice, verifique com EXPLAIN se o planejador realmente o usa e meça o tempo da consulta antes e depois.
  9. Revise periodicamente e remova índices não utilizados; eles custam gravações e armazenamento para sempre.

O modelo mental central a manter: um índice é uma estrutura de busca classificada pela qual você paga em cada gravação para que leituras específicas e seletivas se tornem baratas. Adicione um quando você puder nomear a consulta que ele atende e mostrar que ele ajuda.

Resultado

#1 | Vencedor

Votos de vitória

3 / 3

Pontuação média

90
Modelos avaliadores Anthropic Claude Opus 4.8

Pontuação total

89

Comentário geral

A resposta A é completa, precisa e excepcionalmente adequada ao público-alvo. Separa claramente a analogia do comportamento real do banco de dados (como solicitado explicitamente no prompt), explica a estrutura da árvore B com detalhes concretos sobre leituras de nós e cobre custos de escrita, armazenamento e seletividade com nuances corretas, incluindo o caso em que a indexação de um valor raro de baixa cardinalidade ainda pode compensar. Aborda completamente índices compostos e a regra do prefixo mais à esquerda com uma forte ilustração de lista telefônica, e inclui uma seção rica sobre "quando um índice não ajuda" (funções, curingas iniciais, conversões de tipo, tabelas pequenas). Os dois exemplos SQL são coerentes e diretamente ligados a padrões de consulta, e a lista de verificação é altamente acionável, referenciando EXPLAIN, medição e exclusão de índices não utilizados. Ponto fraco menor: é mais longa e densa do que o estritamente necessário, mas isso raramente prejudica a compreensão dada a forte estrutura.

Ver detalhes da avaliação

Clareza

Peso 30%
90

As explicações são precisas e constroem logicamente; a separação deliberada da analogia do comportamento real, a ilustração da lista telefônica para a ordem das colunas e o modelo mental final tornam os conceitos abstratos vívidos. Ligeiramente mais denso que B, mas nunca confuso.

Correção

Peso 25%
90

Tecnicamente preciso em toda a linha, incluindo pontos sutis: planejadores ignorando índices de baixa seletividade, índices de expressão como exceção, falha do curinga inicial, problemas de conversão de tipo e a nota correta de que um valor raro de baixa cardinalidade consultado com frequência ainda pode se beneficiar. A estimativa de leitura de nós da árvore B é razoável.

Adequação ao público

Peso 20%
90

Bem ajustada para um desenvolvedor júnior que conhece SELECT/WHERE/JOIN: evita detalhes internos profundos, nomeia as regras práticas e liga cada conceito a uma decisão que o desenvolvedor pode tomar. A densidade é o único risco menor para um novato.

Completude

Peso 15%
90

Cobre todos os elementos solicitados e mais: índice como estrutura, aceleração de leitura, custo de escrita/armazenamento, árvore B de alto nível, seletividade, índices compostos, prefixo mais à esquerda, múltiplos casos de não ajuda, dois exemplos SQL contrastantes e uma lista de verificação rica incluindo EXPLAIN e exclusão de índices não utilizados.

Estrutura

Peso 10%
80

Fluxo lógico e bem seccionado desde a definição até as compensações, seletividade, índices compostos, casos de não ajuda, exemplos e lista de verificação. Blocos de texto ligeiramente mais pesados reduzem a escaneabilidade em comparação com B.

Modelos avaliadores Google Gemini 2.5 Flash

Pontuação total

92

Comentário geral

A Resposta A fornece uma explicação excepcionalmente clara, abrangente e prática de índices de banco de dados, adaptada perfeitamente para um desenvolvedor backend júnior. Ela cobre todos os tópicos necessários com excelente profundidade, incluindo uma seção robusta sobre situações em que os índices não ajudam e uma lista de verificação altamente acionável. As analogias e explicações diretas são bem integradas, e os exemplos SQL são pertinentes.

Ver detalhes da avaliação

Clareza

Peso 30%
90

A Resposta A é excepcionalmente clara, usando títulos bem estruturados, linguagem precisa e analogias eficazes (como a lista telefônica para prefixo mais à esquerda) para explicar conceitos complexos. O fluxo é lógico e fácil de seguir.

Correção

Peso 25%
95

A Resposta A é altamente precisa em todas as explicações, desde a mecânica da B-tree até as nuances de seletividade e índices compostos. Ela identifica corretamente vários cenários em que os índices são benéficos ou prejudiciais, incluindo o suporte a consultas de intervalo e cláusulas ORDER BY com B-trees.

Adequação ao público

Peso 20%
90

A Resposta A é perfeitamente adaptada para um desenvolvedor backend júnior. A linguagem é acessível, a analogia é simples e eficaz, e o conselho prático é abrangente sem ser avassalador. O 'modelo mental central' no final é um ótimo resumo para o público-alvo.

Completude

Peso 15%
95

A Resposta A é altamente completa, cobrindo todos os tópicos solicitados em profundidade. Ela fornece uma lista muito abrangente de situações em que um índice pode não ajudar e uma lista de verificação detalhada e acionável, excedendo as expectativas de orientação prática.

Estrutura

Peso 10%
90

A Resposta A tem uma excelente estrutura com títulos claros e descritivos que guiam o leitor pelo material de forma lógica. Cada conceito é introduzido e explicado de maneira bem organizada, tornando o conteúdo fácil de digerir.

Modelos avaliadores OpenAI GPT-5.5

Pontuação total

89

Comentário geral

A Resposta A é uma explicação de ensino altamente completa, precisa e bem estruturada. Explica claramente os índices como estruturas de consulta separadas e ordenadas, aborda o comportamento das árvores B, as compensações entre leitura/escrita/armazenamento, a seletividade, os índices compostos, o comportamento do prefixo mais à esquerda e muitas situações em que os índices podem não ajudar. Seus exemplos são práticos e sua lista de verificação final é diretamente acionável. As fraquezas menores são algumas simplificações amplas, como implicar um comportamento genérico de LIKE-prefixo em árvores B e dizer que o índice de exemplo é rápido em uma tabela de qualquer tamanho, mas isso não prejudica materialmente a explicação.

Ver detalhes da avaliação

Clareza

Peso 30%
88

A Resposta A é muito clara, com explicações diretas, exemplos concretos e transições suaves da analogia para o comportamento real do banco de dados. É um pouco longa, mas o detalhe geralmente melhora a compreensão em vez de obscurecê-la.

Correção

Peso 25%
90

A Resposta A é tecnicamente precisa para um banco de dados relacional genérico no nível pretendido. Ela explica corretamente estruturas de índice separadas, consulta de árvore B, compensações de leitura/escrita/armazenamento, seletividade, ordenação de índices compostos e casos comuns de não uso, com apenas simplificações genéricas menores.

Adequação ao público

Peso 20%
87

A Resposta A está bem adaptada a um desenvolvedor backend júnior que conhece SQL básico. Ela fornece modelos mentais práticos, exemplos realistas e orientação acionável, embora sua amplitude possa ser um pouco densa para uma primeira introdução.

Completude

Peso 15%
93

A Resposta A cobre quase todos os elementos solicitados: o que são índices, acelerações de leitura, custos de escrita e armazenamento, comportamento da árvore B, seletividade, índices compostos, comportamento do prefixo mais à esquerda, múltiplos casos em que os índices podem não ajudar, dois exemplos de SQL e uma lista de verificação forte.

Estrutura

Peso 10%
90

A Resposta A é muito bem organizada, com títulos claros, progressão lógica, exemplos colocados após os conceitos e uma lista de verificação prática no final. A estrutura apoia fortemente o aprendizado.

Vamos falar sobre índices de banco de dados. Você já escreveu consultas SQL que provavelmente funcionam muito bem em sua máquina de desenvolvimento com algumas centenas de linhas. Mas quando uma tabela cresce para milhões de linhas, algumas dessas consultas podem se tornar incrivelmente lentas. Um índice é a ferramenta mais comum que usamos para resolver esse problema.

O que é um Índice de Banco de Dados? Uma Analogia

Pense em um índice como o índice no final de um livro didático. Se você quiser encontrar todas as páginas que mencionam "B-trees", você não lê o livro inteiro de capa a capa. Em vez disso, voc...

Mostrar resposta completa

Vamos falar sobre índices de banco de dados. Você já escreveu consultas SQL que provavelmente funcionam muito bem em sua máquina de desenvolvimento com algumas centenas de linhas. Mas quando uma tabela cresce para milhões de linhas, algumas dessas consultas podem se tornar incrivelmente lentas. Um índice é a ferramenta mais comum que usamos para resolver esse problema.

O que é um Índice de Banco de Dados? Uma Analogia

Pense em um índice como o índice no final de um livro didático. Se você quiser encontrar todas as páginas que mencionam "B-trees", você não lê o livro inteiro de capa a capa. Em vez disso, você vai ao índice, encontra a entrada para "B-trees" e vê uma lista classificada de números de página (por exemplo, 112, 254, 256). Isso é muito mais rápido.

Um índice de banco de dados funciona da mesma maneira. É uma estrutura de dados separada que o banco de dados mantém. Ele contém uma cópia dos dados de uma ou mais colunas em ordem classificada, juntamente com um ponteiro de volta para a linha original na tabela. Quando você consulta dados nessa coluna, o banco de dados pode usar esse índice classificado para encontrar rapidamente os ponteiros para as linhas que você precisa, em vez de escanear a tabela inteira linha por linha (um "full table scan").

Como Funciona: A B-Tree

A maioria dos bancos de dados relacionais usa uma B-tree para seus índices padrão. Você não precisa conhecer os detalhes profundos da ciência da computação, mas em um nível geral, uma B-tree é uma estrutura de árvore auto-balanceada. Imagine uma hierarquia ramificada. Para encontrar um valor, o banco de dados começa no nó raiz e segue um caminho pelos ramos. Cada etapa reduz drasticamente a pesquisa. Isso permite que o banco de dados encontre qualquer valor em um conjunto de dados massivo com muito poucos passos, tornando as pesquisas incrivelmente eficientes (complexidade de tempo logarítmica, ou O(log n)) em comparação com um full table scan (complexidade de tempo linear, ou O(n)).

As Compensações: Velocidade de Gravação e Armazenamento

Os índices não são gratuitos. Eles vêm com dois custos principais:

  1. Armazenamento: Um índice é uma estrutura de dados física armazenada em disco. Ele duplica os dados da sua tabela, portanto, consome espaço de armazenamento extra.
  2. Gravações Mais Lentas: Esta é a compensação mais importante. Quando você INSERT, UPDATE ou DELETE uma linha, o banco de dados não apenas altera a tabela. Ele também deve atualizar todos os índices que contêm as colunas afetadas para mantê-los sincronizados e classificados. Se você tem uma tabela com cinco índices, uma instrução INSERT na verdade resulta em seis gravações: uma para a tabela e uma para cada índice. Isso pode desacelerar significativamente aplicações com muitas gravações.

Conceitos Chave para Indexação Prática

1. Seletividade
Seletividade refere-se a quantos valores únicos existem em uma coluna em relação ao número total de linhas.

  • Alta Seletividade: Uma coluna onde a maioria dos valores é única, como user_id ou email_address. Índices nessas colunas são muito eficazes porque podem reduzir uma pesquisa a apenas uma ou poucas linhas muito rapidamente.
  • Baixa Seletividade: Uma coluna com muito poucos valores únicos, como um booleano is_active (verdadeiro/falso) ou uma coluna status ('pendente', 'ativo', 'inativo'). Um índice em uma coluna de baixa seletividade é frequentemente inútil. Se você pesquisar por todos os usuários ativos, isso pode ser 80% da sua tabela. É mais rápido para o banco de dados ler a tabela inteira do que ir e voltar entre um índice e os dados da tabela.

2. Índices Compostos e a Regra do Prefixo Mais à Esquerda
Um índice composto é um índice em duas ou mais colunas, como CREATE INDEX idx_name ON users (last_name, first_name);.

A ordem das colunas é crítica. Esta é a regra do prefixo mais à esquerda. Um índice em (A, B, C) pode ser usado pelo banco de dados para acelerar consultas que filtram em:

  • A
  • A e B
  • A, B e C

No entanto, ele não pode ser usado para consultas que filtram apenas em B, C ou B e C. O banco de dados precisa das primeiras colunas no índice para iniciar sua pesquisa.

Exemplos SQL

Vamos supor uma tabela products com milhões de linhas.

Bom Exemplo de Índice:
Muitos usuários estão procurando produtos por um código de produto exclusivo.

-- A Consulta
SELECT name, price FROM products WHERE product_code = 'ABC-12345';

-- A Solução: Um índice em uma coluna de alta seletividade
CREATE INDEX idx_products_product_code ON products (product_code);

Este índice é altamente eficaz porque product_code é único (alta seletividade), e o índice permite que o banco de dados encontre a linha do produto exata quase instantaneamente.

Exemplo de Índice Menos Útil:
Queremos encontrar todos os produtos que estão atualmente disponíveis para venda.

-- A Consulta
SELECT * FROM products WHERE is_available = TRUE;

-- O Índice Problemático
CREATE INDEX idx_products_is_available ON products (is_available);

Este índice não é muito útil. A coluna is_available tem baixa seletividade (apenas dois valores: verdadeiro e falso). Se 90% dos produtos estiverem disponíveis, o banco de dados provavelmente ignorará este índice e realizará um full table scan, pois é mais eficiente.

Checklist: Quando Adicionar um Índice

Antes de adicionar um índice, pergunte a si mesmo:

  1. A tabela é grande? (Índices em tabelas pequenas têm pouco ou nenhum benefício).
  2. Uma consulta específica está lenta? (Não adicione índices cegamente; adicione-os para corrigir um problema de desempenho conhecido).
  3. Estou filtrando nesta coluna com frequência em uma cláusula WHERE ou usando-a em um JOIN? (Esses são os principais candidatos para indexação).
  4. A coluna tem alta seletividade? (O índice reduzirá significativamente o número de linhas a serem verificadas?).
  5. Para um índice composto, minha consulta usa as colunas mais à esquerda do índice?
  6. Esta é uma tabela com muitas leituras? (Se a tabela tiver gravações muito frequentes, mas poucas leituras, o custo de manutenção do índice pode superar os benefícios de leitura).

Resultado

#2

Votos de vitória

0 / 3

Pontuação média

81
Modelos avaliadores Anthropic Claude Opus 4.8

Pontuação total

78

Comentário geral

A resposta B é clara, bem organizada e adequadamente direcionada para um desenvolvedor júnior. Usa a analogia do livro didático, explica o comportamento da árvore B em um nível alto com notação Big-O e cobre as compensações de leitura/escrita/armazenamento com precisão. Seletividade, índices compostos e a regra do prefixo mais à esquerda são explicados de forma correta e concisa. Os dois exemplos SQL são limpos e relevantes. No entanto, é notavelmente menos completa: o requisito "quando um índice pode não ajudar" é apenas parcialmente coberto (principalmente baixa seletividade), faltando funções/expressões, curingas de cauda, conversões de tipo e o caso de coluna do prefixo mais à esquerda ignorada. Também não separa claramente a analogia do comportamento direto do banco de dados conforme solicitado explicitamente, e a lista de verificação, embora sólida, é menos acionável (sem menção a EXPLAIN, medição ou manutenção/remoção de índices não utilizados).

Ver detalhes da avaliação

Clareza

Peso 30%
80

Muito legível e limpo, com bons títulos e frases simples. O enquadramento Big-O é um bom toque. Ligeiramente menos ilustrativo sobre a ordenação de índices compostos (sem intuição concreta de ordem de classificação), e a analogia e o comportamento real estão um tanto misturados em vez de claramente distinguidos.

Correção

Peso 25%
80

Preciso em todos os pontos centrais: busca logarítmica da árvore B, matemática de amplificação de escrita, seletividade e prefixo mais à esquerda. Nenhum erro, mas omite várias ressalvas corretas (funções, curingas, conversões) e dá uma imagem ligeiramente menos completa de quando os índices falham.

Adequação ao público

Peso 20%
80

Excelente adequação: tom amigável, começa relacionando-se com a experiência do leitor de consultas lentas em escala, e mantém o jargão mínimo com uma breve explicação de Big-O. Muito acessível, embora com um pouco menos de profundidade para um desenvolvedor que deseja agir em casos extremos.

Completude

Peso 15%
60

Cobre a maioria dos elementos necessários, mas é mais fraco em "situações em que um índice pode não ajudar", limitando-o efetivamente à baixa seletividade, enquanto omite funções/expressões, curingas de cauda, conversões e casos de prefixo ignorado. Também não contrasta explicitamente a analogia com o comportamento direto, conforme solicitado.

Estrutura

Peso 10%
90

Estrutura limpa e escaneável com títulos claros, listas numeradas e blocos de código bem formatados. A organização é concisa e fácil de navegar, apresentada marginalmente melhor que A.

Modelos avaliadores Google Gemini 2.5 Flash

Pontuação total

85

Comentário geral

A Resposta B oferece uma explicação muito boa sobre índices de banco de dados, com uma introdução forte e explicações claras e concisas dos conceitos centrais. Utiliza uma boa analogia e fornece exemplos SQL relevantes. No entanto, é menos abrangente que a Resposta A, particularmente na sua cobertura de situações em que um índice pode não ajudar e a sua lista de verificação final é menos detalhada.

Ver detalhes da avaliação

Clareza

Peso 30%
85

A Resposta B é muito clara e concisa, com bom uso de títulos e marcadores. As explicações são geralmente fáceis de entender, embora a menção de 'complexidade de tempo logarítmica' possa ser um pouco avançada para um desenvolvedor júnior, mesmo com uma explicação rápida.

Correção

Peso 25%
90

A Resposta B está correta em todas as suas explicações de conceitos centrais. A descrição da B-tree, os trade-offs, a seletividade e a regra do prefixo mais à esquerda são apresentados com precisão. Não foram identificados erros factuais.

Adequação ao público

Peso 20%
88

A Resposta B também é bem adequada ao público-alvo, com uma introdução relacionável e explicações diretas. A linguagem é simples e direta, tornando fácil para um desenvolvedor júnior compreender os conceitos.

Completude

Peso 15%
75

A Resposta B cobre a maioria dos tópicos solicitados, mas é menos completa que a Resposta A. A sua secção sobre 'situações em que um índice pode não ajudar' é menos exaustiva, faltando pontos chave como funções em colunas ou wildcards à esquerda. A lista de verificação final também é mais curta e menos detalhada.

Estrutura

Peso 10%
85

A Resposta B está bem estruturada com títulos claros e uso eficaz de marcadores. A informação flui logicamente, tornando fácil ler e entender as diferentes secções.

Modelos avaliadores OpenAI GPT-5.5

Pontuação total

79

Comentário geral

A Resposta B é clara, acessível e, na maior parte, correta para um desenvolvedor júnior. Explica o conceito central, a analogia do livro, a busca em árvore B em alto nível, os custos de gravação/armazenamento, a seletividade, os índices compostos e o comportamento do prefixo mais à esquerda. No entanto, é menos completa que a Resposta A: apresenta menos casos em que os índices podem não ajudar, não discute funções, curingas iniciais, comportamento de intervalo/ordenação, escolhas do planejador com muito detalhe, ou como verificar com EXPLAIN, e sua lista de verificação é mais básica.

Ver detalhes da avaliação

Clareza

Peso 30%
81

A Resposta B é clara e fácil de seguir, usando linguagem simples e seções concisas. É ligeiramente menos explicativa em algumas áreas, especialmente sobre as decisões do planejador e quando os índices são ignorados.

Correção

Peso 25%
80

A Resposta B está, na maior parte, correta e evita grandes afirmações enganosas. Suas explicações sobre árvores B, seletividade e índices compostos são sólidas, mas é mais simplificada e omite algumas ressalvas importantes sobre a usabilidade do índice e o comportamento do planejador do banco de dados.

Adequação ao público

Peso 20%
84

A Resposta B é muito acessível para um desenvolvedor júnior, com linguagem amigável e exemplos diretos. É menos profunda do que o ideal para alguém que está começando a projetar índices intencionalmente, mas o tom e o nível de complexidade são apropriados.

Completude

Peso 15%
68

A Resposta B cobre os conceitos principais e inclui dois exemplos SQL e uma lista de verificação, mas omite vários pontos práticos solicitados ou importantes, como funções em colunas indexadas, curingas iniciais, conversões de tipo, utilidade de intervalo e ORDER BY, e verificação com planos de execução.

Estrutura

Peso 10%
80

A Resposta B tem uma estrutura limpa e legível com títulos, marcadores, exemplos e uma lista de verificação. É coerente, embora menos abrangente e menos conectada às decisões reais de design de consulta do que a Resposta A.

Resumo comparativo

Para cada tarefa e discussão, a classificação final é definida por agregação de rankings por avaliador (rank médio + desempate por Borda). A pontuação média é exibida como referência.

Avaliadores: 3

Votos de vitória

3 / 3

Pontuação média

90
Ver esta resposta

Votos de vitória

0 / 3

Pontuação média

81
Ver esta resposta

Resultados da avaliação

Modelos avaliadores OpenAI GPT-5.5

Motivo do vencedor

A Resposta A vence porque é mais forte nos critérios de clareza e correção, que têm um peso elevado, ao mesmo tempo que é substancialmente mais completa. Cobre todos os tópicos solicitados com profundidade prática, inclui uma melhor discussão de casos extremos em que os índices podem não ajudar, fornece orientações mais relevantes sobre índices compostos e termina com uma lista de verificação mais acionável. A Resposta B é boa, mas omite várias considerações práticas importantes exigidas pela solicitação.

Modelos avaliadores Google Gemini 2.5 Flash

Motivo do vencedor

A resposta A vence devido à sua superioridade em completude e profundidade, especialmente no conselho prático crucial para um desenvolvedor júnior. Sua seção sobre 'Quando um índice não ajuda' é muito mais abrangente, cobrindo casos de borda importantes como funções em colunas, curingas iniciais e incompatibilidades de tipo. Além disso, sua lista de verificação prática é mais detalhada e acionável, fornecendo um guia melhor para a tomada de decisões no mundo real. Embora ambas as respostas sejam claras e corretas, a minúcia da resposta A a torna um recurso de ensino mais valioso.

Modelos avaliadores Anthropic Claude Opus 4.8

Motivo do vencedor

A resposta A vence nos dois critérios de maior peso, clareza (30%) e correção (25%), ao mesmo tempo que vence decisivamente na completude (15%). Ela cumpre explicitamente os requisitos de nuances da solicitação que B omite ou aborda apenas parcialmente: separar a analogia do comportamento direto do banco de dados, uma seção completa "quando um índice não ajuda" (funções, curingas, casts, tabelas pequenas, prefixo pulado), a regra de ordenação de colunas igualdade-depois-intervalo e uma lista de verificação acionável referenciando EXPLAIN e manutenção de índices. B é limpo e correto, mas menos completo e não separa a analogia do comportamento real como solicitado. O resultado ponderado favorece A.

X f L