Capítulo 08: Índices, Desempenho e Pesquisa de Alta Performance

🎯 Objetivo da Aula

Nesta aula de fechamento do Módulo 2, você aprenderá como os bancos de dados relacionais conseguem localizar uma entrega específica no meio de centenas de milhares de registros em frações de segundo. No laboratório de informática, você aprenderá a teoria das estruturas de dados em árvore (B-Tree) e dominará a criação de Índices no Microsoft Access. Você aprenderá a configurar a propriedade Indexado (Indexed), abrirá a Janela de Índices (Indexes Window) e compreenderá o equilíbrio crítico entre acelerar consultas e o custo de processamento nas operações de inserção.

Ao final desta aula, seu banco de dados estará calibrado para operações de alta velocidade, permitindo buscas instantâneas por Chave de NF-e, datas de despacho e status de entrega na FastLog S.A.


🏢 Cenário Prático (FastLog S.A.)

Empresa: FastLog Transportes & Logística Integrada S.A.
Problema: Com a expansão das operações da transportadora, a tabela de manifesto acumulou mais de 250.000 fretes nos últimos 3 anos. Quando um motorista encostava na guarita da portaria e informava o número do Conhecimento de Transporte (CT-e) para liberação da carga, o computador do assistente congelava por até 45 segundos para encontrar o registro! Formavam-se filas quilométricas de carretas na rodovia Anhanguera, gerando multas da concessionária de pedágio por obstrução de tráfego.
Sua Missão: Como especialista em performance de banco de dados, você abrirá a Janela de Índices do Access, identificará os campos gargalos de pesquisa e criará Índices de Alta Performance, reduzindo o tempo de localização de 45 segundos para 0,02 segundo, liberando as carretas instantaneamente.


🧠 Fundamentos: A Teoria Traduzida

1. Varredura de Tabela (Table Scan) vs. Busca Indexada

Imagine que você tem um livro de legislação de transporte com 1.200 páginas e precisa encontrar o artigo que fala sobre “transporte de cargas indivisíveis”:

  • Sem Índice (Table Scan): Você é obrigado a folhear página por página, linha por linha, da página 1 até a 1.200. Se o livro tiver 1 milhão de linhas, o computador faz 1 milhão de comparações na memória RAM!
  • Com Índice (B-Tree Index): Você vai direto ao Índice Remissivo no final do livro, localiza a letra “C” de “Cargas”, vê que o tema está na página 842 e abre diretamente nela. O computador faz apenas 3 ou 4 comparações!
flowchart TD
    subgraph SEM_INDICE["❌ Sem Índice: Varredura Completa (Table Scan)"]
        S1["Linha 1: Não é"] --> S2["Linha 2: Não é"] --> S3["Linha 3: Não é..."] --> SN["Linha 250.000: Achou!<br/>(Tempo: 45 segundos)"]
    end

    subgraph COM_INDICE["✅ Com Índice: Árvore Binária / B-Tree"]
        I1["Raiz do Índice B-Tree"] --> I2["Ramo: Chaves de 100k a 200k"]
        I2 --> I3["Nó Folha: Ponteiro direto para o Disco"]
        I3 --> OK["Registro Localizado Instantaneamente!<br/>(Tempo: 0,02 segundo)"]
    end

    style SEM_INDICE fill:#f8d7da,stroke:#721c24,stroke-width:2px,color:#721c24
    style COM_INDICE fill:#d4edda,stroke:#155724,stroke-width:2px,color:#155724

2. Os Tipos de Índices no Microsoft Access

  1. Chave Primária (PK): O Access cria automaticamente um índice único agrupado para a chave primária.
  2. Índice Único (Duplicação Não Autorizada):
    • Acelera a busca e proíbe valores repetidos.
    • Ideal para: CPF, CNPJ, Chave de Acesso NF-e (44 dígitos), Código CTE.
  3. Índice Não Único (Duplicação Autorizada):
    • Acelera a busca e permite valores repetidos.
    • Ideal para campos frequentemente utilizados em filtros e ordenações: Data_Despacho, Status_Ordem, UF_Destino, ID_Cliente (FK).

3. A Regra de Ouro: O Custo de Manutenção do Índice

Se índices são tão rápidos, por que não indexamos todas as colunas de uma tabela?

  • Leitura (SELECT): Fica extremamente rápida!
  • Escrita (INSERT, UPDATE, DELETE): Fica mais lenta. A cada novo frete cadastrado, o motor do Access precisa não apenas gravar a linha na tabela, mas também reorganizar todas as árvores B-Tree dos índices criados.
  • Boa Prática: Indexe apenas colunas que aparecem com frequência em cláusulas de busca, filtros de relatórios ou que sejam Chaves Estrangeiras!

📖 Exemplo Guiado: Passo a Passo no Laboratório

Abra o arquivo FastLog_Database.accdb. Vamos acessar a ferramenta profissional de auditoria de índices do Access.

Passo 1: Acessando a Janela de Índices

  1. No Painel de Navegação, clique com o botão direito em tbl_OrdensFrete ➔ Modo Design.
  2. Na faixa de opções superior (guia Design da Tabela), localize o grupo Mostrar/Ocultar.
  3. Clique no botão Índices (Indexes - ícone com relâmpago ⚡ e linhas de texto).
  4. Uma janela flutuante com a lista de todos os índices ativos da tabela será exibida:
    • Coluna 1: Nome do Índice
    • Coluna 2: Nome do Campo
    • Coluna 3: Ordem de Classificação (Crescente ou Decrescente)
  5. Observe que o índice PrimaryKey já está configurado sobre o campo ID_OrdemFrete.

🛠️ Prática Obrigatória 1: Criando Índices de Alta Performance na Tabela de Fretes

Você indexará as colunas críticas de busca da transportadora: Data_Despacho e Status_Ordem.

Passo a Passo no Computador:

  1. Com a tabela tbl_OrdensFrete no Modo Design:
  2. Indexando a Data de Despacho:
    • Clique sobre o campo Data_Despacho.
    • Na parte inferior (Propriedades do Campo), localize a linha Indexado.
    • Clique na setinha e selecione: Sim (Duplicação Autorizada).
  3. Indexando o Status da Ordem:
    • Clique sobre o campo Status_Ordem.
    • Na linha Indexado, selecione: Sim (Duplicação Autorizada).
  4. Adicionando o Campo de Documento Fiscal (Chave NF-e) com Índice Único:
    • Insira uma nova linha no final da tabela:
      • Nome do Campo: Chave_NFe
      • Tipo de Dados: Texto Curto
      • Tamanho do Campo: 44
      • Requerido: Sim
      • Indexado: Sim (Duplicação Não Autorizada)
  5. Abra a Janela de Índices (botão com relâmpago ⚡) e verifique que os três novos índices foram registrados com sucesso.
  6. Salve a tabela pressionando Ctrl + B.

✅ Resultado Esperado (Prática 1):

A tabela tbl_OrdensFrete passa a contar com índices B-Tree ativos para datas, status e chave eletrônica da SEFAZ, garantindo que buscas por qualquer um desses três critérios ocorram em milissegundos.


🛠️ Prática Obrigatória 2: Utilizando Filtros e Pesquisa na Folha de Dados

Agora você utilizará os recursos de localização rápida potencializados pelos índices criados.

Passo a Passo no Computador:

  1. Abra tbl_OrdensFrete no Modo Folha de Dados.
  2. Certifique-se de que existem pelo menos 3 fretes cadastrados com status variados (ex: "Agendado", "Em Trânsito", "Entregue").
  3. Utilizando a Ferramenta Localizar (Ctrl + U ou Ctrl + L):
    • Clique no cabeçalho da coluna Chave_NFe.
    • Pressione o atalho: Ctrl + U (Localizar).
    • No campo Localizar: digite os primeiros dígitos de uma chave existente.
    • Em Coincidir:, escolha Qualquer Parte do Campo.
    • Clique em Localizar Próxima. O Access salta imediatamente para o registro exato!
  4. Utilizando o Filtro Rápido por Seleção:
    • Na coluna Status_Ordem, clique na setinha de filtro ao lado do cabeçalho.
    • Desmarque a caixinha (Selecionar Tudo) e marque apenas: ☑ Em Trânsito.
    • Clique em OK.
    • Observe a barra inferior de status do Access exibir: “Filtrado”. Apenas as cargas ativas na estrada são mostradas na tela!
    • Clique no botão Alternar Filtro na faixa de opções para voltar à visão completa.

✅ Resultado Esperado (Prática 2):

A pesquisa e os filtros de folha de dados respondem instantaneamente, validando o ganho de agilidade propiciado pela arquitetura indexada.


📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o banco de dados e feche o Access.
  2. Nomeie o arquivo: FastLog_BD_Cap08_SeuNome_SeuSobrenome.accdb.
  3. Acesse o Microsoft Teams na sua turma.
  4. Abra a tarefa: “Banco de Dados - Cap 08: Índices e Performance”.
  5. Anexe o arquivo .accdb e conclua o envio clicando em Entregar (Turn In).

💡 Checkpoint de Gestão & TI

Parabéns por concluir o Módulo 2! Você acaba de construir toda a infraestrutura física e lógica do banco de dados relacional da FastLog S.A. Suas tabelas estão perfeitamente normalizadas em 3FN, seus relacionamentos 1:N e N:M estão conectados com integridade referencial ativa e suas colunas estratégicas estão otimizadas com índices de alta velocidade. Você está pronto para o Módulo 3: Linguagem SQL Corporativa, onde aprenderá a programar consultas de inteligência de negócios!


🔥 Desafio de Fixação: Criação de Índice Composto de Rastreamento

Em operações logísticas de grande porte, os fiscais de pátio costumam pesquisar fretes combinando dois critérios simultâneos: Data de Despacho e Status da Carga (ex: “Quais fretes saíram hoje que ainda estão ‘Em Trânsito’?”).

Crie um Índice Composto Multicolunas diretamente na Janela de Índices do Access:

  1. Abra tbl_OrdensFrete no Modo Design e clique no botão Índices (relâmpago ⚡).
  2. Na primeira linha vazia da Janela de Índices:
    • Na coluna Nome do Índice, digite: idx_Data_Status.
    • Na coluna Nome do Campo, selecione: Data_Despacho.
  3. Na linha imediatamente abaixo:
    • Deixe a coluna Nome do Índice EM BRANCO (é assim que o Access entende que o campo pertence ao mesmo índice anterior!).
    • Na coluna Nome do Campo, selecione: Status_Ordem.
  4. Feche a janela de índices e salve a tabela.

🔑 Revelar Gabarito Oficial e Material de Apoio da Aula (Clique para expandir)
💡 Incentivo Pedagógico: Tente resolver as práticas e o desafio de fixação por conta própria antes de abrir o gabarito. Seus erros e tentativas durante o laboratório são a chave para a consolidação real do aprendizado!

Configuração do Índice Composto na Janela de Índices:

1
2
3
4
5
6
7
8
====================================================================================
Nome do Índice     | Nome do Campo      | Ordem de Classificação | Propriedades
====================================================================================
PrimaryKey         | ID_OrdemFrete      | Crescente              | Primário: Sim, Exclusivo: Sim
Chave_NFe          | Chave_NFe          | Crescente              | Primário: Não, Exclusivo: Sim
idx_Data_Status    | Data_Despacho      | Crescente              | Primário: Não, Exclusivo: Não
                   | Status_Ordem       | Crescente              | (segunda coluna do índice composto)
====================================================================================

📥 Download dos Scripts desta Aula:
Baixe o arquivo de script Capitulo_08.sql ou o pacote compactado (.zip) com os comandos SQL e esquemas da aula.


📝 Atividade Extra: Questionário de Fixação (Caderno)

Instruções: Responda no caderno, de próprio punho, as 10 perguntas reflexivas abaixo com base no conteúdo deste capítulo. Ao concluir, apresente o caderno ao professor para conferência e visto.

  1. O que é uma Varredura Completa de Tabela (Table Scan) e por que ela gera lentidão em tabelas com milhares de registros?
  2. Explique a analogia entre o índice remissivo de um livro e um índice de banco de dados baseado na estrutura de árvore B-Tree.
  3. No Cenário Prático da FastLog, qual problema operacional a lentidão de 45 segundos por consulta causava na portaria da transportadora?
  4. Diferencie um Índice Único (Duplicação Não Autorizada) de um Índice Não Único (Duplicação Autorizada).
  5. Mencione dois exemplos de campos em um sistema logístico que devem obrigatoriamente possuir Índice Único.
  6. Mencione dois exemplos de campos que se beneficiam de Índice Não Único.
  7. Explique por que NÃO devemos indexar todas as colunas de uma tabela indiscriminadamente.
  8. Qual é o impacto de termos muitos índices em uma tabela durante as operações de inserção (INSERT) e exclusão (DELETE)?
  9. Como abrimos a Janela de Índices no Modo Design do Microsoft Access?
  10. No Desafio de Fixação, qual é a técnica visual adotada na Janela de Índices do Access para criar um Índice Composto com múltiplos campos?