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:#1557242. Os Tipos de Índices no Microsoft Access
- Chave Primária (PK): O Access cria automaticamente um índice único agrupado para a chave primária.
- Í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.
- Í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
- No Painel de Navegação, clique com o botão direito em
tbl_OrdensFrete➔ Modo Design. - Na faixa de opções superior (guia Design da Tabela), localize o grupo Mostrar/Ocultar.
- Clique no botão Índices (Indexes - ícone com relâmpago ⚡ e linhas de texto).
- 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)
- Observe que o índice
PrimaryKeyjá está configurado sobre o campoID_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:
- Com a tabela
tbl_OrdensFreteno Modo Design: - 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).
- Clique sobre o campo
- Indexando o Status da Ordem:
- Clique sobre o campo
Status_Ordem. - Na linha Indexado, selecione: Sim (Duplicação Autorizada).
- Clique sobre o campo
- 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)
- Nome do Campo:
- Insira uma nova linha no final da tabela:
- Abra a Janela de Índices (botão com relâmpago ⚡) e verifique que os três novos índices foram registrados com sucesso.
- 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:
- Abra
tbl_OrdensFreteno Modo Folha de Dados. - Certifique-se de que existem pelo menos 3 fretes cadastrados com status variados (ex:
"Agendado","Em Trânsito","Entregue"). - Utilizando a Ferramenta Localizar (
Ctrl + UouCtrl + 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!
- Clique no cabeçalho da coluna
- 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.
- Na coluna
✅ 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)
- Salve o banco de dados e feche o Access.
- Nomeie o arquivo:
FastLog_BD_Cap08_SeuNome_SeuSobrenome.accdb. - Acesse o Microsoft Teams na sua turma.
- Abra a tarefa: “Banco de Dados - Cap 08: Índices e Performance”.
- Anexe o arquivo
.accdbe 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:
- Abra
tbl_OrdensFreteno Modo Design e clique no botão Índices (relâmpago ⚡). - 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.
- Na coluna Nome do Índice, digite:
- 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.
- Feche a janela de índices e salve a tabela.
📝 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.
- O que é uma Varredura Completa de Tabela (Table Scan) e por que ela gera lentidão em tabelas com milhares de registros?
- Explique a analogia entre o índice remissivo de um livro e um índice de banco de dados baseado na estrutura de árvore B-Tree.
- No Cenário Prático da FastLog, qual problema operacional a lentidão de 45 segundos por consulta causava na portaria da transportadora?
- Diferencie um Índice Único (Duplicação Não Autorizada) de um Índice Não Único (Duplicação Autorizada).
- Mencione dois exemplos de campos em um sistema logístico que devem obrigatoriamente possuir Índice Único.
- Mencione dois exemplos de campos que se beneficiam de Índice Não Único.
- Explique por que NÃO devemos indexar todas as colunas de uma tabela indiscriminadamente.
- Qual é o impacto de termos muitos índices em uma tabela durante as operações de inserção (
INSERT) e exclusão (DELETE)? - Como abrimos a Janela de Índices no Modo Design do Microsoft Access?
- 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?