Saltar para o conteúdo

professor Índices B-tree teste

Teste de domínio

Doze perguntas e um caso, intercalados: não seguem a ordem das lições e não dizem de que lição vêm. É de propósito — na vida real ninguém te diz de que capítulo é o problema.

Como funciona

⭐ Regras
  • Sem consultar as lições nem a folha. Se consultares, marca a pergunta com (consultei) — é informação útil para a correção, não uma falta.
  • Não há soluções nesta página. A correção vem de /corrigir indices-btree-sql depois de entregares.
  • Se não souberes, escreve o que sabes e onde encalhaste. «Não sei» corrige-se; uma resposta vaga a fingir que sabe é a pior entrega possível, porque esconde onde está o buraco.
  • Conta ~45 minutos. A parte 4 vale tanto como as outras três juntas.

Parte 1 — mecanismo

Parte 2 — ler planos

Index Only Scan using idx_a on t  (actual time=0.03..14.2 rows=9000 loops=1)
  Heap Fetches: 17400
  Buffers: shared hit=9200 read=140

Parte 3 — decidir

Parte 4 — caso completo

⚠️ Esta parte vale tanto como as outras três juntas

Não é por ser mais difícil — é por ser a única que mede se consegues juntar as peças.

O caso

Tabela leituras, 40 000 000 de linhas, ~9000 INSERTs por minuto, sem UPDATEs. Colunas: id, sensor_id, medida, estado ('ok' 99,2%, 'alerta' 0,8%), registada_em.

Índices atuais: leituras_pkey (id) · (sensor_id) · (registada_em) · (estado).

Um painel corre de 30 em 30 segundos:

SELECT sensor_id, max(medida) FROM leituras
WHERE estado = 'alerta' AND registada_em > now() - interval '1 hour'
GROUP BY sensor_id;

Demora 6 s. O plano:

HashAggregate  (actual time=5980.2..5981.0 rows=140 loops=1)
  ->  Bitmap Heap Scan on leituras  (actual time=410.3..5890.1 rows=2400 loops=1)
        Recheck Cond: (estado = 'alerta'::text)
        Filter: (registada_em > (now() - '01:00:00'::interval))
        Rows Removed by Filter: 317600
        Heap Blocks: exact=41200 lossy=98000
        Buffers: shared hit=12000 read=127200
        ->  Bitmap Index Scan on leituras_estado  (actual time=95.1..95.1 rows=320000 loops=1)
              Index Cond: (estado = 'alerta'::text)

Entregar

O botão gera o Markdown com todas as respostas. Cola-o em topicos/indices-btree-sql/respostas/AAAA-MM-DD-teste.md e corre /corrigir indices-btree-sql.

As respostas ficam guardadas no teu browser enquanto não fechares — mas o armazenamento local pode falhar sem aviso. Copia a entrega antes de fechar a página.