1.1 - Como o SGBD processa uma operação SELECT/WHERE quando não há índices
Uma operação com cláusula WHERE, que utiliza comparadores lógicos (>, < e/ou =) normalmente requer um índice para otimizar a consulta. Quando o índice não existe, os SGBDs mais modernos identificam essa necessidade e criam índices antes de processar a consulta. Esses índices podem ser criados temporariamente (geralmente em memória RAM apenas para realizar a consulta), ou quando o serviço de otimização do SGBD (gerenciador de estatísticas) reconhece que essa necessidade é recorrente, pode criar o índice fisicamente no disco (de modo definitivo).
Em situações que realmente não há como o SGBD usar ou criar um índice antes do processamento, a única alternativa de processamento é recorrer a uma pesquisa sequencial processando todos os registros. Ou seja, para cada registro da condição SELECT, o SGBD processa um a um para ver se as condições da clausula WHERE são verdadeiras ou falsas. Quando verdadeiras, ele mantém os dados do registro em memória; quando falsas, ele as despreza.
Exemplo: Vamos supor a operação SELECT * FROM FUNCIONARIOS WHERE Idade > 18 AND Salario > 1.000. Vamos imaginar que a tabela de funcionários possua 10.000 registros:
- Sem índices, o SGBD irá fazer uma operação SELECT para todos os 10.000 registros da tabela FUNCIONÁRIOS (o que é ineficiente).
- Para cada um dos registros, o SGBD irá verificar por meio de um teste lógico (operação IF) se para aquele registro, a condição Idade > 18 AND Salario > 1.000 é verdadeira ou falsa.
- Quando for verdadeira, ele mantém os dados da consulta, quando for falsa, ele despreza os dados do registro.
- Ao final, ele retornará para o usuário os registros onde a condição foi verdadeira.
Observe que nesse cenário ocorreu a leitura de 10.000 registros (acesso a disco) e também 10.000 testes lógicos.
Veremos no próximo item como o uso de índices permitirá o processamento da mesma consulta com uma quantidade muito menor de testes lógicos.
Copyright © 2016 AIEC.