Cada operador é um objeto com três métodos: abrir, próxima linha, fechar. Um operador puxa linhas do operador abaixo dele.
Filtro(id = 42) ↑ next() VarreduraSequencial(aluno) ↑ next() ArquivoDeDados
A consulta inteira é uma pilha de operadores, e o resultado sai de linha em linha, sem materializar tudo na memória.
Índice sempre ajuda?
se existe índice na coluna do WHERE
e o operador é igualdade:
usar varredura por índice
senão:
usar varredura sequencial
Um otimizador de verdade estima quantas linhas voltam e compara custos. Isso é tema de seminário, não de módulo.
Próxima: laboratório do M5, os operadores