Orivel Orivel
Abrir menu

Explique indexação de banco de dados para um desenvolvedor júnior

Compare respostas de modelos para esta tarefa benchmark em Explicação e revise pontuacoes, comentarios e exemplos relacionados.

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

X f L

Indice

Visao geral da tarefa

Generos de Comparacao

Explicação

Modelo criador da tarefa

Modelos participantes

Modelos avaliadores

Enunciado da tarefa

Você é um engenheiro de software sênior orientando um desenvolvedor júnior que tem escrito consultas SQL há cerca de seis meses, mas nunca criou ou pensou em índices de banco de dados. Ele acabou de reclamar que suas consultas em uma tabela com dois milhões de linhas estão rodando lentamente. Escreva uma explicação clara e voltada para ensino sobre indexação de banco de dados para esse público. Sua explicação deve cobrir o seguinte: 1. O que é um índice de banco de dados e por que ele existe, usando pelo menos um...

Mostrar mais

Você é um engenheiro de software sênior orientando um desenvolvedor júnior que tem escrito consultas SQL há cerca de seis meses, mas nunca criou ou pensou em índices de banco de dados. Ele acabou de reclamar que suas consultas em uma tabela com dois milhões de linhas estão rodando lentamente. Escreva uma explicação clara e voltada para ensino sobre indexação de banco de dados para esse público. Sua explicação deve cobrir o seguinte: 1. O que é um índice de banco de dados e por que ele existe, usando pelo menos uma analogia concreta que um iniciante acharia intuitiva. 2. Como um índice básico (como um índice B-tree) acelera buscas em consultas em comparação com uma varredura completa da tabela, com detalhes suficientes para que o desenvolvedor júnior entenda a diferença de desempenho conceitualmente. 3. Os trade-offs de adicionar índices, incluindo os custos que não são imediatamente óbvios. 4. Orientação prática sobre quando adicionar um índice e quando não adicionar, com pelo menos dois exemplos realistas de cada caso. 5. Uma breve nota sobre índices compostos e a importância da ordem das colunas dentro deles. Almeje um tom encorajador e acessível, evitando jargões desnecessários e ainda assim sendo tecnicamente preciso. A explicação deve ser suficientemente completa para que o desenvolvedor júnior possa decidir com confiança se deve adicionar um índice a uma coluna após lê-la.

Politica de avaliacao

Uma resposta forte deve ser avaliada nas seguintes dimensões. Primeiro, clareza e acessibilidade: a explicação deve usar linguagem simples apropriada para um desenvolvedor júnior, evitar jargões não explicados e incluir pelo menos uma analogia bem escolhida que realmente esclareça o conceito. Segundo, precisão técnica: a descrição de como os índices funcionam, particularmente buscas em B-tree versus varreduras completas de tabela, deve estar correta e não ser enganosa, mesmo que simplificada. Terceiro, completude:...

Mostrar mais

Uma resposta forte deve ser avaliada nas seguintes dimensões. Primeiro, clareza e acessibilidade: a explicação deve usar linguagem simples apropriada para um desenvolvedor júnior, evitar jargões não explicados e incluir pelo menos uma analogia bem escolhida que realmente esclareça o conceito. Segundo, precisão técnica: a descrição de como os índices funcionam, particularmente buscas em B-tree versus varreduras completas de tabela, deve estar correta e não ser enganosa, mesmo que simplificada. Terceiro, completude: todos os cinco tópicos solicitados devem ser abordados com conteúdo significativo, não apenas com uma frase para cada um. Quarto, consciência dos trade-offs: a resposta deve articular claramente custos como escrita mais lenta, aumento de armazenamento e sobrecarga de manutenção, não apenas os benefícios de velocidade de leitura. Quinto, utilidade prática: os exemplos de quando adicionar ou pular um índice devem ser realistas e variados, ajudando o leitor a desenvolver julgamento genuíno. Sexto, cobertura de índices compostos: a explicação sobre a ordem das colunas em índices compostos deve ser precisa e incluir contexto suficiente para que o leitor entenda por que a ordem importa. Finalmente, o tom deve ser encorajador e no papel de mentor, correspondendo ao cenário descrito no prompt. Respostas que sejam excessivamente superficiais, tecnicamente imprecisas ou que deixem de cobrir as seções solicitadas devem receber avaliação inferior.

Respostas

Olá, ouvi dizer que você está tendo problemas com consultas lentas nessa tabela grande. Esse é um problema clássico e uma ótima oportunidade para falarmos sobre uma das ferramentas mais importantes para o desempenho de bancos de dados: a indexação. Não se preocupe, o conceito é bem simples depois que você pega o jeito. ### 1. O que é um Índice de Banco de Dados e Por que Ele Existe? Pense em uma tabela de banco de dados sem um índice como um livro grosso sem uma página de índice no final. Se você precisar encontrar todas as menções a um tópico específico, digamos "B-trees", você não tem escolha a não ser começa...

Mostrar resposta completa

Olá, ouvi dizer que você está tendo problemas com consultas lentas nessa tabela grande. Esse é um problema clássico e uma ótima oportunidade para falarmos sobre uma das ferramentas mais importantes para o desempenho de bancos de dados: a indexação. Não se preocupe, o conceito é bem simples depois que você pega o jeito. ### 1. O que é um Índice de Banco de Dados e Por que Ele Existe? Pense em uma tabela de banco de dados sem um índice como um livro grosso sem uma página de índice no final. Se você precisar encontrar todas as menções a um tópico específico, digamos "B-trees", você não tem escolha a não ser começar na página um e ler o livro inteiro até encontrar todas as instâncias. Isso é lento e ineficiente. É isso que o banco de dados faz quando executa um "full table scan" (varredura completa da tabela). Um índice de banco de dados é exatamente como o índice no final desse livro. É uma tabela de consulta separada e especial que o banco de dados pode usar para encontrar rapidamente a localização dos dados. O índice contém os valores da coluna que você indexou e um ponteiro para a localização exata (a linha) na tabela principal onde esse valor reside. Portanto, em vez de escanear o livro inteiro, você apenas procura por "B-trees" no índice, que lhe dá uma lista de números de página (por exemplo, 15, 92, 210), e você pode pular diretamente para essas páginas. É um atalho enorme. ### 2. Como um Índice Acelera as Consultas Vamos ficar um pouco mais técnicos. A maioria dos bancos de dados usa uma estrutura chamada B-tree para seus índices padrão. A coisa fundamental a saber sobre uma B-tree é que ela é uma estrutura de árvore ordenada e auto-balanceada. Como os dados no índice estão ordenados, o banco de dados não precisa verificar cada entrada uma por uma. * **Sem Índice (Full Table Scan):** Quando você executa `SELECT * FROM users WHERE username = 'jsmith';` em sua tabela de dois milhões de linhas, o banco de dados precisa percorrer todas as duas milhões de linhas, verificando a coluna `username` em cada uma para ver se é 'jsmith'. O tempo que isso leva é diretamente proporcional ao número de linhas na tabela. * **Com um Índice em `username`:** O banco de dados não toca na tabela principal no início. Ele vai para o índice `username`, muito menor e ordenado. Ele pode usar um algoritmo de busca muito eficiente (conceitualmente semelhante a uma busca binária) para navegar na árvore e encontrar 'jsmith' em apenas alguns passos. Assim que ele encontra a entrada no índice, ele obtém o ponteiro e vai diretamente para a linha completa na tabela principal. Em vez de dois milhões de operações, pode levar apenas 10 ou 15 para encontrar os dados. Essa diferença é insignificante em tabelas pequenas, mas se torna enorme em tabelas com milhões de linhas. ### 3. Os Trade-offs: Qual é a Pegadinha? Os índices são fantásticos para acelerar consultas de leitura (`SELECT`), mas não são gratuitos. Existem dois custos principais: * **Operações de Escrita Mais Lentas:** Toda vez que você `INSERT`, `UPDATE` ou `DELETE` uma linha em sua tabela, o banco de dados precisa fazer um trabalho extra. Ele não pode apenas alterar os dados na tabela; ele também precisa atualizar todos os índices dessa tabela para garantir que permaneçam sincronizados. Quanto mais índices você tiver, mais sobrecarga você adiciona às suas operações de escrita. * **Espaço de Armazenamento:** Um índice é uma coisa física que ocupa espaço em disco. Para uma tabela grande, um índice também pode ser bastante grande. Isso pode aumentar seus custos de armazenamento e o tamanho dos backups do seu banco de dados. ### 4. Orientação Prática: Quando Adicionar (e Não Adicionar) um Índice Portanto, a chave é ser estratégico. Você não quer indexar tudo, mas quer indexar as coisas certas. **Bons momentos para adicionar um índice:** 1. **Em colunas usadas frequentemente em cláusulas `WHERE`:** Este é o caso de uso mais comum. Se você tem uma tabela `products` e seus usuários estão constantemente pesquisando ou filtrando por `product_category`, essa coluna é um candidato perfeito para um índice. * *Exemplo:* `SELECT * FROM products WHERE product_category = 'Electronics';` 2. **Em colunas de chave estrangeira:** Quando você `JOIN` tabelas, o banco de dados precisa corresponder aos valores nas colunas em que você está juntando. Indexar a coluna de chave estrangeira no lado "muitos" de um relacionamento acelera dramaticamente os joins. * *Exemplo:* `SELECT o.*, c.name FROM orders o JOIN customers c ON o.customer_id = c.id;`. Você deve ter um índice em `orders.customer_id`. **Quando você pode NÃO querer adicionar um índice:** 1. **Em tabelas com atividade de escrita muito intensa e leitura muito baixa:** Se você tem uma tabela que está constantemente recebendo novas linhas inseridas, mas você raramente a consulta (por exemplo, uma tabela que registra cada clique em seu site para processamento em lote posterior), adicionar índices apenas tornará todas essas inserções mais lentas com pouco benefício. 2. **Em colunas com baixa cardinalidade (poucos valores únicos):** Imagine uma tabela `users` com uma coluna booleana `is_active` (verdadeiro/falso). Um índice aqui não é muito útil. Se você pesquisar por todos os usuários ativos, provavelmente estará solicitando 50% ou mais da tabela. O banco de dados provavelmente determinará que é mais rápido fazer uma varredura completa da tabela do que usar o índice para buscar ponteiros para metade das linhas da tabela. ### 5. Uma Breve Nota sobre Índices Compostos Às vezes, você filtrará por mais de uma coluna ao mesmo tempo. Para isso, você pode criar um **índice composto** em várias colunas. Por exemplo: `CREATE INDEX idx_name ON users (last_name, first_name);` **A ordem das colunas é crítica aqui.** Um índice em `(last_name, first_name)` é como uma lista telefônica ordenada primeiro por sobrenome e depois por nome. É muito rápido para consultas como: * `WHERE last_name = 'Smith'` * `WHERE last_name = 'Smith' AND first_name = 'John'` No entanto, ele **não** será muito útil para uma consulta que filtra apenas pela segunda coluna: * `WHERE first_name = 'John'` Como o índice não está ordenado primeiro por `first_name`, o banco de dados não pode usá-lo eficientemente para encontrar todos os 'Johns'. Portanto, ao criar um índice composto, sempre coloque primeiro a coluna pela qual você filtra com mais frequência. Espero que isso lhe dê uma base sólida. O próximo passo é analisar suas consultas lentas, usar uma ferramenta como `EXPLAIN` para ver seu plano de consulta e identificar quais colunas em suas cláusulas `WHERE` ou `JOIN` seriam bons candidatos para um índice. Me diga se você quiser que eu analise uma de suas consultas juntos.

Resultado

#2

Votos de vitoria

0 / 3

Pontuacao media

81
Modelos avaliadores OpenAI GPT-5.2

Pontuacao total

82

Comentario geral

Explicação clara e encorajadora com uma forte analogia de livro didático e um sólido contraste conceitual entre varreduras completas de tabela e pesquisas indexadas. Cobre as principais compensações (desaceleração da escrita, armazenamento) e fornece exemplos práticos de fazer/não fazer, além de uma nota correta sobre a ordem das colunas de índice composto. Ligeiramente leve em custos operacionais menos óbvios (manutenção/fragmentação, complexidade do planejador, contenção) e algumas declarações são um pouco simplificadas demais (por exemplo, "índice muito menor" e "10 ou 15 etapas" sem contexto). No geral, muito bom e legível, mas um pouco menos prático do que B.

Ver detalhes da avaliacao

Clareza

Peso 30%
80

Explica conceitos de forma simples com uma forte analogia única e um exemplo SQL concreto; pequenas simplificações excessivas e menos explicações de reforço o tornam ligeiramente menos nítido do que B.

Correcao

Peso 25%
81

Descrição de alto nível precisa de indexação B-tree, seletividade e comportamento de prefixo de índice composto; algumas simplificações (tamanho do índice, "10-15 etapas" fixas) podem induzir ao erro sem ressalvas.

Adequacao ao publico

Peso 20%
85

Tom de mentor solidário e evita jargões pesados, com terminologia suficiente introduzida e explicada.

Completude

Peso 15%
78

Aborda todas as cinco áreas solicitadas com profundidade decente, mas as compensações e o processo de decisão prático são menos desenvolvidos e os exemplos são, em geral, menos numerosos.

Estrutura

Peso 10%
86

Claramente dividido para corresponder ao prompt, tornando fácil de escanear e aprender.

Modelos avaliadores Google Gemini 2.5 Flash

Pontuacao total

85

Comentario geral

A Resposta A fornece uma explicação muito sólida e clara sobre indexação de banco de dados. Ela cobre com sucesso todos os pontos solicitados, usando uma boa analogia e mantendo um tom encorajador. A estrutura com títulos numerados facilita o acompanhamento. Seus exemplos de quando adicionar e não adicionar índices são realistas e bem explicados. A explicação da ordem das colunas de índices compostos também é precisa e útil.

Ver detalhes da avaliacao

Clareza

Peso 30%
90

A explicação é muito clara, usando uma única analogia eficaz e linguagem direta. As seções numeradas auxiliam na legibilidade.

Correcao

Peso 25%
85

As explicações técnicas, incluindo a mecânica da B-tree e os trade-offs, são precisas e apresentadas corretamente para o público.

Adequacao ao publico

Peso 20%
85

O tom é perfeitamente encorajador e acessível, adequando-se bem ao cenário de mentor-desenvolvedor júnior. A linguagem evita jargões desnecessários.

Completude

Peso 15%
80

Todos os cinco pontos solicitados são cobertos adequadamente com conteúdo significativo e exemplos realistas.

Estrutura

Peso 10%
80

O uso de títulos numerados para cada seção fornece uma estrutura clara e fácil de seguir.

Modelos avaliadores Anthropic Claude Opus 4.6

Pontuacao total

75

Comentario geral

A Resposta A é uma explicação bem estruturada, clara e tecnicamente precisa sobre indexação de banco de dados. Ela abrange os cinco tópicos exigidos com boas analogias (índice de livro), explicação correta de B-tree, trade-offs claros, exemplos práticos e uma seção sólida sobre índices compostos. O tom é encorajador e de mentor. No entanto, é um pouco menos completa do que poderia ser: a seção de trade-offs cobre apenas dois custos (escritas mais lentas e armazenamento) sem mencionar questões mais sutis como bloqueio, fragmentação ou índices redundantes. A orientação prática fornece exatamente dois exemplos para cada caso, atendendo ao mínimo, mas sem ir além. A seção de índices compostos é precisa e usa a analogia da lista telefônica de forma eficaz. No geral, é uma resposta sólida e competente que atende a todos os requisitos em um bom nível.

Ver detalhes da avaliacao

Clareza

Peso 30%
78

A Resposta A é clara e bem escrita, com uma boa analogia de livro e linguagem acessível. A progressão do conceito para o detalhe é lógica. No entanto, algumas seções poderiam se beneficiar de uma elaboração ligeiramente maior para aprofundar o entendimento.

Correcao

Peso 25%
75

A Resposta A é tecnicamente precisa em toda a sua extensão. A explicação da B-tree está correta, os trade-offs são válidos e a seção de índices compostos explica corretamente a regra do prefixo mais à esquerda. A afirmação de '10 ou 15 operações' para uma busca em B-tree em 2 milhões de linhas é razoável (log base ~100 de 2 milhões). Nenhum erro detectado.

Adequacao ao publico

Peso 20%
75

A Resposta A tem um tom amigável e de mentor, apropriado para um desenvolvedor júnior. Usa 'Hey' para iniciar e se oferece para revisar consultas em conjunto no final. A linguagem evita jargões desnecessários. Adapta-se bem ao público, mas poderia oferecer mais suporte para a tomada de decisões.

Completude

Peso 15%
68

A Resposta A abrange os cinco tópicos exigidos com conteúdo significativo. No entanto, a seção de trade-offs cobre apenas dois custos (sobrecarga de escrita e armazenamento), perdendo questões mais sutis. A orientação prática fornece exatamente dois exemplos cada, atendendo ao requisito mínimo. A seção de índices compostos é adequada, mas breve.

Estrutura

Peso 10%
75

A Resposta A usa cabeçalhos markdown claros, numerados para corresponder aos cinco tópicos da solicitação, tornando-a fácil de navegar. A estrutura é limpa e lógica. Exemplos de código estão bem posicionados. O parágrafo final oferece um bom encerramento com próximos passos acionáveis.

Resposta B: OpenAI GPT-5.4

Se a sua tabela tiver dois milhões de linhas e uma consulta parecer lenta, os índices são uma das primeiras coisas a serem consideradas. Eles não são mágica, mas muitas vezes são a diferença entre uma consulta que verifica uma pequena porção de dados e uma consulta que percorre tudo. Um índice de banco de dados é uma estrutura de dados separada que ajuda o banco de dados a encontrar linhas mais rapidamente. A maneira mais simples de pensar sobre isso é o índice no final de um livro didático. Se você quiser encontrar todas as páginas que mencionam "transações", você não lê o livro inteiro da página 1 em diante. V...

Mostrar resposta completa

Se a sua tabela tiver dois milhões de linhas e uma consulta parecer lenta, os índices são uma das primeiras coisas a serem consideradas. Eles não são mágica, mas muitas vezes são a diferença entre uma consulta que verifica uma pequena porção de dados e uma consulta que percorre tudo. Um índice de banco de dados é uma estrutura de dados separada que ajuda o banco de dados a encontrar linhas mais rapidamente. A maneira mais simples de pensar sobre isso é o índice no final de um livro didático. Se você quiser encontrar todas as páginas que mencionam "transações", você não lê o livro inteiro da página 1 em diante. Você salta para o índice, encontra a palavra e vai direto para as páginas relevantes. Um índice de banco de dados funciona da mesma maneira: em vez de escanear todas as linhas de uma tabela para encontrar valores correspondentes, o banco de dados pode usar o índice para saltar para perto das linhas que ele precisa. Outra boa analogia é uma lista telefônica classificada por sobrenome. Se você quiser encontrar "Silva", você não inspeciona cada pessoa em ordem aleatória. Como os nomes estão organizados, você pode rapidamente reduzir onde os Silvas estarão. Um índice dá ao banco de dados esse tipo de caminho organizado. Sem um índice, o banco de dados pode ter que fazer uma varredura completa da tabela. Isso significa ler linha após linha, verificando se cada uma corresponde à sua cláusula WHERE. Em uma tabela pequena, isso é bom. Em uma tabela com dois milhões de linhas, pode ser caro, especialmente se as linhas forem grandes ou a consulta for executada com frequência. Um tipo comum de índice é um índice B-tree. Você não precisa memorizar o algoritmo interno, mas a ideia principal é que os valores indexados são armazenados em ordem classificada em uma estrutura que permite ao banco de dados reduzir repetidamente o espaço de busca. É semelhante a procurar uma palavra em um dicionário: você abre perto do meio, decide se sua palavra vem antes ou depois dessa seção, e então repete até chegar à área correta. Você não está verificando cada entrada uma por uma. Suponha que você execute esta consulta com frequência: SELECT * FROM orders WHERE customer_id = 12345; Se não houver um índice em customer_id, o banco de dados pode inspecionar todas as duas milhões de linhas, comparando customer_id em cada linha com 12345. Isso é muito trabalho. Se houver um índice em customer_id, o banco de dados pode usar o índice para ir direto para a parte da estrutura onde 12345 aparece, e então seguir ponteiros para as linhas correspondentes. Em vez de tocar em quase todas as linhas, ele pode tocar apenas em uma pequena parte do índice e, em seguida, apenas nas linhas da tabela correspondentes. Conceitualmente, essa é a vantagem de desempenho: muito menos dados para ler e muito menos verificações inúteis. Isso é importante porque os bancos de dados são frequentemente limitados menos pela CPU bruta e mais pela quantidade de dados que precisam ser lidos da memória ou do disco. Varreduras completas podem forçar o banco de dados a ler grandes quantidades de dados. Consultas de índice geralmente leem muito menos. Menos leitura geralmente significa consultas mais rápidas. Os índices são especialmente úteis para colunas usadas em: - Filtros WHERE - Condições JOIN - Cláusulas ORDER BY - GROUP BY em alguns casos - Restrições de unicidade, como chaves primárias ou e-mails únicos Dito isso, os índices não são gratuitos. Um erro muito comum de iniciante é pensar: "Se os índices tornam as leituras mais rápidas, devo indexar tudo." Na prática, muitos índices podem prejudicar seu sistema. A troca óbvia é o armazenamento. Cada índice ocupa espaço extra em disco, às vezes muito se a tabela for grande ou as colunas indexadas forem largas. A troca menos óbvia é o custo de escrita. Quando você INSERE uma nova linha, ATUALIZA uma coluna indexada ou EXCLUI uma linha, o banco de dados precisa atualizar não apenas os dados da tabela, mas também todos os índices afetados. Se uma tabela tiver muitos índices, as escritas se tornam mais lentas porque o banco de dados tem mais estruturas para manter. Existem também custos de manutenção e planejamento: - Mais índices significam mais trabalho durante inserções, atualizações e exclusões. - Mais índices podem aumentar o bloqueio ou a contenção em cargas de trabalho com muitas escritas. - Os índices precisam ser considerados pelo planejador de consultas, o que pode adicionar complexidade. - Alguns índices se tornam fragmentados ou menos eficientes com o tempo, dependendo do banco de dados. - Índices redundantes podem desperdiçar espaço sem fornecer nenhum benefício real. Outro ponto sutil: um índice só é útil quando ajuda o banco de dados a eliminar muitas linhas. Se sua consulta corresponder a uma porcentagem enorme da tabela, o banco de dados pode optar por não usar o índice. Por exemplo, se 90% das linhas tiverem status = 'ativo', um índice em status pode não ajudar muito em consultas que buscam linhas ativas. O banco de dados pode decidir que uma varredura completa é mais barata do que usar o índice e, em seguida, saltar para quase todas as linhas de qualquer maneira. Então, quando você deve adicionar um índice? Uma boa regra geral é: adicione um índice quando uma consulta for importante, for executada com frequência e filtrar ou juntar colunas que reduzem significativamente o conjunto de resultados. Bons candidatos para indexação: Exemplo 1: Procurar um usuário por e-mail Se seu aplicativo frequentemente faz: SELECT * FROM users WHERE email = 'a@b.com'; então indexar o e-mail é geralmente uma ótima ideia. As buscas por e-mail são comuns e o resultado geralmente é uma linha. Um índice único é ainda melhor se os e-mails precisarem ser únicos. Exemplo 2: Juntando tabelas grandes Se você frequentemente junta pedidos a clientes usando orders.customer_id = customers.id, então um índice em orders.customer_id é tipicamente útil. Colunas de junção em tabelas grandes são candidatos clássicos a índices. Exemplo 3: Filtrando registros recentes Se você consulta regularmente: SELECT * FROM events WHERE created_at >= '2026-01-01'; então um índice em created_at pode ajudar, especialmente se você geralmente deseja uma fatia recente relativamente pequena de uma tabela muito grande. Exemplo 4: Ordenando com um limite Consultas como: SELECT * FROM posts WHERE author_id = 42 ORDER BY created_at DESC LIMIT 20; muitas vezes se beneficiam da indexação de colunas envolvidas tanto na filtragem quanto na ordenação, potencialmente com um índice composto. Quando você não deve adicionar um índice? Exemplo 1: Tabelas muito pequenas Se uma tabela tiver apenas algumas centenas de linhas, uma varredura completa geralmente já é barata. Um índice pode adicionar complexidade sem um ganho de velocidade significativo. Exemplo 2: Colunas com baixa seletividade Baixa seletividade significa que uma coluna tem muito poucos valores distintos, como is_deleted com verdadeiro ou falso, ou status com apenas alguns valores comuns. Se a maioria das consultas ainda corresponder a uma grande parte da tabela, indexar essa coluna sozinha pode não ajudar muito. Exemplo 3: Tabelas com muitas escritas e pouco benefício de leitura Imagine uma tabela audit_log que recebe milhares de inserções por segundo, mas você raramente a consulta, exceto por chave primária. Adicionar vários índices extras "apenas por precaução" pode desacelerar significativamente as escritas. Exemplo 4: Colunas raramente usadas Se ninguém consulta por middle_name, há pouca razão para indexá-lo. Os índices devem servir a padrões de consulta reais, não a padrões hipotéticos. Uma maneira prática de decidir é começar com consultas lentas reais, não com suposições. Olhe para as consultas que seu aplicativo executa com mais frequência, especialmente as lentas. Pergunte: - Esta tabela é grande o suficiente para que escaneá-la seja caro? - A consulta filtra em uma coluna que reduz muito os resultados? - A consulta é executada com frequência suficiente para que a otimização importe? - O benefício de leitura superará o custo extra de escrita e armazenamento? Use também as ferramentas de plano de consulta do seu banco de dados, como EXPLAIN. Elas mostram se o banco de dados está fazendo uma varredura completa da tabela, usando um índice e aproximadamente quanto trabalho ele espera. Para um desenvolvedor júnior, aprender a ler a saída do EXPLAIN é um dos passos seguintes mais valiosos depois de aprender o que são índices. Agora sobre índices compostos. Um índice composto é um índice em mais de uma coluna, como: (customer_id, created_at) Isso é útil quando as consultas filtram comumente por várias colunas juntas. Por exemplo: SELECT * FROM orders WHERE customer_id = 12345 AND created_at >= '2026-01-01'; Um índice composto em (customer_id, created_at) pode ser muito melhor do que índices separados de coluna única, dependendo da consulta e do banco de dados. A ordem das colunas importa muito. Pense em um índice composto como classificar papéis primeiro por customer_id, depois dentro de cada cliente por created_at. Isso significa que o índice é naturalmente ótimo para consultas que começam com customer_id. Ele pode ajudar com: - WHERE customer_id = ... - WHERE customer_id = ... AND created_at >= ... - às vezes ORDER BY created_at quando customer_id é fixo Mas o mesmo índice geralmente não é tão útil para consultas que filtram apenas por created_at, porque created_at é a segunda coluna. O banco de dados não pode saltar eficientemente para o meio com base apenas na segunda parte se a primeira parte não estiver restrita. Então, se seu padrão de consulta comum é: WHERE customer_id = ? AND created_at >= ? então (customer_id, created_at) é frequentemente uma escolha forte. Se seu padrão de consulta comum é principalmente: WHERE created_at >= ? então você pode precisar de um índice começando com created_at em vez disso. Essa é a principal lição sobre índices compostos: escolha a ordem das colunas com base em como suas consultas reais filtram e ordenam, não com base no que parece arrumado. Para resumir, aqui está um modelo mental prático: - Um índice é uma estrutura de atalho que ajuda o banco de dados a encontrar linhas sem ler a tabela inteira. - Ele acelera as leituras reduzindo a quantidade de dados que o banco de dados precisa examinar. - Ele custa espaço extra e torna as escritas mais lentas porque o índice precisa ser mantido. - Adicione índices para consultas importantes em tabelas grandes onde filtros ou junções são seletivos e frequentes. - Evite índices desnecessários em tabelas pequenas, colunas de baixa seletividade ou tabelas com muitas escritas e pouco benefício de leitura. - Para índices compostos, a ordem das colunas é crucial. Se você se lembrar de uma coisa, lembre-se disto: os índices devem ser impulsionados por padrões de consulta. Não pergunte: "Esta coluna deve ter um índice?" isoladamente. Pergunte: "Quais consultas executamos, com que frequência e quantas linhas elas precisam tocar?" Assim que você começar a pensar dessa forma, você será capaz de tomar decisões sólidas de indexação com confiança.

Resultado

#1 | Vencedor

Votos de vitoria

3 / 3

Pontuacao media

86
Modelos avaliadores OpenAI GPT-5.2

Pontuacao total

87

Comentario geral

Explicação minuciosa e orientada para o ensino, com analogias intuitivas (índice de livro, lista telefônica, dicionário), uma descrição conceitualmente precisa da redução vs. varredura de B-tree, e forte ênfase em I/O como o verdadeiro gargalo. As compensações são mais completas, incluindo custos menos óbvios (contenção/bloqueio, complexidade do planejador, fragmentação, índices redundantes). Fornece múltiplos exemplos realistas de quando adicionar e quando não adicionar, além de orientação prática para decisão (padrões de consulta, EXPLAIN). Índices compostos e ordem de colunas são explicados claramente com conselhos orientados por padrões de consulta. Ligeiramente mais longo do que o necessário, mas permanece acessível e bem estruturado.

Ver detalhes da avaliacao

Clareza

Peso 30%
86

Usa múltiplas analogias intuitivas e sempre retorna à ideia central de reduzir dados examinados/I-O; mais longo, mas geralmente muito claro para um desenvolvedor júnior.

Correcao

Peso 25%
87

Conceitualmente preciso sobre a redução de B-tree, seletividade, o planejador escolhendo varreduras vs. índices, e a ordem de índices compostos; evita grandes afirmações enganosas e fornece declarações corretas orientadas para a orientação.

Adequacao ao publico

Peso 20%
84

Encorajador e pragmático, explica termos como seletividade e EXPLAIN em contexto; ligeiramente mais denso/longo, mas ainda apropriado para um usuário de SQL com 6 meses de experiência.

Completude

Peso 15%
92

Cobre totalmente todos os pontos solicitados com detalhes significativos: analogias, mecânica de varredura vs. índice, compensações extensas, múltiplos exemplos de fazer/não fazer, e forte discussão sobre índices compostos/ordem.

Estrutura

Peso 10%
83

Bem organizado com progressão lógica e conclusão; menos explicitamente mapeado às seções numeradas do prompt, mas ainda fácil de seguir com títulos/parágrafos e listas.

Modelos avaliadores Google Gemini 2.5 Flash

Pontuacao total

91

Comentario geral

A Resposta B é uma explicação excepcional que não só abrange todos os pontos necessários, mas também adiciona profundidade e valor prático significativos. Utiliza múltiplas analogias intuitivas, fornece detalhes mais abrangentes sobre trade-offs (incluindo custos de manutenção e considerações do planejador de consultas) e oferece uma gama mais ampla de exemplos realistas para orientação prática. A inclusão de conselhos sobre o uso de `EXPLAIN` e um resumo final de 'modelo mental' tornam-na excecionalmente útil para um desenvolvedor júnior. O tom é consistentemente excelente e altamente semelhante a um mentor.

Ver detalhes da avaliacao

Clareza

Peso 30%
95

A clareza é excecional, realçada por múltiplas analogias intuitivas e um fluxo bem estruturado. O resumo final de 'modelo mental' aumenta ainda mais a compreensão.

Correcao

Peso 25%
90

Tecnicamente precisa, com uma cobertura ligeiramente mais nuançada e abrangente de trade-offs (por exemplo, manutenção, bloqueio) e seletividade de índice, sem complicar excessivamente.

Adequacao ao publico

Peso 20%
90

O tom de mentor é excepcional. Os conselhos práticos adicionais (como usar EXPLAIN) e os exemplos abrangentes são perfeitamente adaptados para ajudar um desenvolvedor júnior a ganhar confiança e discernimento.

Completude

Peso 15%
90

Todos os cinco pontos são abordados de forma completa. A Resposta B fornece trade-offs mais detalhados, um maior número de exemplos práticos e conselhos extras valiosos como o uso de `EXPLAIN` e um modelo mental de resumo, tornando-a mais completa.

Estrutura

Peso 10%
85

A estrutura é lógica e flui muito bem. O uso de negrito para pontos-chave e o excelente resumo de 'modelo mental' no final melhoram significativamente a organização geral e a experiência de aprendizagem.

Modelos avaliadores Anthropic Claude Opus 4.6

Pontuacao total

81

Comentario geral

A Resposta B é uma explicação completa, bem organizada e tecnicamente precisa que vai além do exigido. Fornece duas analogias (índice de livro e lista telefônica), uma explicação clara e correta de B-tree e uma discussão extensa de trade-offs que inclui não apenas custos de armazenamento e escrita, mas também bloqueio, contenção, fragmentação, índices redundantes e complexidade do planejador de consultas. Fornece mais de dois exemplos tanto para quando adicionar quanto para quando não adicionar índices (quatro cada), dando ao leitor um conjunto mais rico de cenários. A seção de índice composto é detalhada e usa um exemplo concreto e realista com explicação clara de por que a ordem das colunas é importante. O tom é acessível e encorajador sem ser condescendente. Também inclui frameworks práticos de tomada de decisão e menciona EXPLAIN como um próximo passo. A resposta é mais longa, mas não é preenchida; o conteúdo adicional é substancial e útil.

Ver detalhes da avaliacao

Clareza

Peso 30%
83

A Resposta B é excepcionalmente clara, usando duas analogias (livro e lista telefônica) e fornecendo exemplos concretos de SQL em todo o texto. A explicação flui naturalmente e constrói o entendimento incrementalmente. O framework prático de tomada de decisão no final é uma adição particularmente clara.

Correcao

Peso 25%
80

A Resposta B é tecnicamente precisa e ligeiramente mais sutil. Explica corretamente as buscas em B-tree, menciona que o banco de dados pode optar por não usar um índice quando a seletividade é baixa, discute bloqueio e contenção como custos de escrita e explica com precisão a ordenação das colunas de índices compostos. O detalhe adicional sobre o planejador de consultas e a fragmentação adiciona profundidade à correção.

Adequacao ao publico

Peso 20%
80

A Resposta B mantém um tom acessível e encorajador durante todo o texto, sem ser condescendente. Diz explicitamente ao leitor 'Você não precisa memorizar o algoritmo interno', o que é tranquilizador. O resumo prático do modelo mental no final e as perguntas de tomada de decisão são particularmente adequados para um desenvolvedor júnior que está construindo seu julgamento. A menção de EXPLAIN como um próximo passo é uma adição prática valiosa.

Completude

Peso 15%
82

A Resposta B cobre todos os cinco tópicos exigidos com profundidade substancial. A seção de trade-offs é notavelmente mais completa, cobrindo armazenamento, custos de escrita, bloqueio, contenção, fragmentação, índices redundantes e complexidade do planejador de consultas. Fornece quatro exemplos cada para quando adicionar e quando não adicionar índices, excedendo em muito o mínimo. A seção de índice composto é detalhada com múltiplos exemplos de padrões de consulta.

Estrutura

Peso 10%
78

A Resposta B usa uma estrutura fluida sem cabeçalhos numerados, mas mantém uma progressão temática clara. Embora falte cabeçalhos de seção explícitos para cada um dos cinco tópicos, o conteúdo está bem organizado com transições claras. O resumo do modelo mental no final é uma escolha estrutural eficaz. A falta de cabeçalhos é uma fraqueza menor em comparação com a estrutura explícita da Resposta A, mas a organização do conteúdo compensa.

Resumo comparativo

Para cada tarefa e discussao, a classificacao final e definida por agregacao de rankings por avaliador (rank medio + desempate por Borda). A pontuacao media e exibida como referencia.

Avaliadores: 3

Votos de vitoria

0 / 3

Pontuacao media

81
Ver esta resposta

Votos de vitoria

3 / 3

Pontuacao media

86
Ver esta resposta

Resultados da avaliacao

Modelos avaliadores Anthropic Claude Opus 4.6

Motivo do vencedor

A Resposta B vence porque é mais completa em todas as dimensões. Fornece mais analogias, cobertura mais detalhada de trade-offs (incluindo custos subtis como bloqueio, fragmentação e índices redundantes), exemplos mais práticos (quatro para cada caso de quando adicionar e quando não adicionar) e uma explicação mais detalhada de índices compostos com padrões de consulta realistas. Ambas as respostas são tecnicamente precisas e bem-tonadas, mas a Resposta B oferece ao programador júnior significativamente mais material para desenvolver um julgamento genuíno, que é o objetivo principal da tarefa. A estrutura de tomada de decisão prática da Resposta B e a ênfase no pensamento orientado por padrões de consulta agregam valor significativo para além do que a Resposta A oferece.

Modelos avaliadores Google Gemini 2.5 Flash

Motivo do vencedor

A Resposta B vence por ser mais abrangente e oferecer maior utilidade prática para o público-alvo. Embora a Resposta A seja muito boa e cubra todos os requisitos, a Resposta B vai além ao detalhar trade-offs mais sutis, oferecer exemplos mais variados e realistas, e incluir conselhos acionáveis como o uso de `EXPLAIN` e um resumo final de 'modelo mental'. Essas adições tornam a Resposta B mais eficaz em equipar um desenvolvedor júnior com a confiança e o entendimento necessários para tomar decisões de indexação.

Modelos avaliadores OpenAI GPT-5.2

Motivo do vencedor

A Resposta B é mais completa e praticamente útil, mantendo-se precisa e acessível. Ela abrange todos os tópicos solicitados com uma consciência mais rica de trade-offs, exemplos realistas mais variados e orientações mais claras sobre o uso de planos de consulta e padrões de consulta para decidir sobre a indexação. A Resposta A é forte e clara, mas a B fornece uma explicação mais completa em estilo de mentor e uma melhor cobertura de custos não óbvios e tomada de decisão no mundo real.

X f L