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. Antes disso, o exercício de hoje
Tabela com 100.000 linhas, 50 linhas por página, índice na coluna id com árvore de altura 3. Cada linha achada pelo índice custa a leitura de uma página de dados.
WHERE que devolve 10 linhas?O item 4 é o que separa a nossa regra de três linhas de um otimizador. Vale como preparo para o seminário de otimização baseada em custo.