Caio recebeu, em seu departamento, um grande número de chamados que relatavam uma lentidão demasiada na execução das consultas no banco de dados que ele mantinha. Então, ele iniciou a busca da solução pelo algoritmo de otimização algébrico heurístico, intrínseco a seu banco de dados. Esse algoritmo é executado em seis etapas e trabalha com algumas regras básicas, que, na maioria das vezes, conseguem melhorar a performance das consultas. Ao analisar as etapas do algoritmo de otimização, Caio identificou um erro na etapa de:
- A)desmembramento das operações de seleção com condições conjuntivas em uma cascata de operações de seleção;
Está certa, pois corresponde ao desmembramento de uma seleção com condição conjuntiva em várias seleções encadeadas.
- B)movimentação das operações de seleção o mais baixo possível na árvore de consulta que for permitido pelos atributos envolvidos na condição de seleção;
Está certa, porque a seleção deve ser movida o mais baixo possível na árvore, respeitando os atributos disponíveis.
- C)reorganização dos nós folhas da árvore de consulta, posicionando as relações com as operações de projeção mais restritivas;
Está errada, pois não existe essa etapa formal de reorganizar folhas com projeções mais restritivas na otimização heurística algébrica.
- D)combinação de um produto cartesiano com uma seleção subsequente na árvore de consulta para uma operação de junção a ser executada;
Está certa, porque produto cartesiano seguido de seleção pode ser reescrito como uma junção.
- E)desmembramento e movimentação da lista de atributos de projeção para o mais baixo possível, criando novas operações de projeção, conforme a necessidade.
Está certa, pois a projeção pode ser decomposta e empurrada para baixo para reduzir atributos desnecessários.
Gabarito: C
A otimização algébrica heurística tenta melhorar a consulta sem fazer conta pesada de custo o tempo todo. Ela usa regras clássicas da álgebra relacional, como empurrar seleções e projeções para baixo da árvore, quebrar seleções com vários testes em seleções menores, e transformar produto cartesiano seguido de seleção em junção. A ideia é simples: reduzir o volume de dados o quanto antes, porque banco de dados gosta de sofrer menos logo no começo da consulta. Em geral, a seleção (sigma) deve descer o máximo possível, desde que os atributos usados na condição estejam disponíveis naquele ponto da árvore. A projeção (pi) também é empurrada para baixo, mantendo apenas os atributos necessários para evitar carregar coluna desnecessária. Isso é doutrina clássica de processamento de consultas em SGBDs, como apresentado em autores como Elmasri e Silberschatz. O erro da questão está na alternativa C porque a otimização heurística não consiste em "reorganizar os nós folhas" para posicionar relações com projeções mais restritivas. O que se faz é reescrever a árvore aplicando regras de equivalência algébrica, especialmente para seleção, projeção e junção. Não há uma etapa formal com esse nome nem essa lógica de "folhas mais restritivas" como regra básica do algoritmo. Então, o ponto central é: a heurística trabalha com empurrar operadores para baixo e simplificar a árvore, não com essa reorganização descrita na alternativa C. Em prova, quando a banca mistura termos verdadeiros com uma etapa inventada, vale desconfiar do enfeite.