Processar uma instrução SQL
Antes de discutir as técnicas para usar SQL programaticamente, é necessário discutir como uma instrução SQL é processada. As etapas envolvidas são comuns às três técnicas, embora cada técnica as execute em momentos diferentes. A ilustração a seguir mostra as etapas envolvidas no processamento de uma instrução SQL, que são discutidas no restante desta seção.
Para processar uma instrução SQL, um DBMS executa as cinco etapas a seguir:
O DBMS primeiro analisa a instrução SQL. Ele divide a instrução em palavras individuais, chamadas tokens, garante que a declaração tenha um verbo e cláusulas válidas e assim por diante. Erros de sintaxe e ortografia podem ser detectados nessa etapa.
O DBMS valida a instrução. Ele verifica a instrução em relação ao catálogo do sistema. Todas as tabelas nomeadas na instrução existem no banco de dados? Todas as colunas existem e os nomes das colunas são inequívocos? O usuário tem os privilégios necessários para executar a instrução? Alguns erros semânticos podem ser detectados nessa etapa.
O DBMS gera um plano de acesso para a instrução. O plano de acesso é uma representação binária das etapas necessárias para realizar a instrução; é o equivalente DBMS do código executável.
O DBMS otimiza o plano de acesso. Explora diversas formas de executar o plano de acesso. Um índice pode ser usado para acelerar uma pesquisa? O DBMS deveria primeiro aplicar uma condição de pesquisa à Tabela A e, depois, ingressá-la na Tabela B ou deveria começar com o ingresso e usar a condição de pesquisa posteriormente? Uma pesquisa sequencial em uma tabela pode ser evitada ou reduzida a um subconjunto da tabela? Após explorar as alternativas, o DBMS escolhe uma delas.
O DBMS executa a instrução executando o plano de acesso.
As etapas usadas para processar uma instrução SQL variam na quantidade de acesso ao banco de dados que exigem e na quantidade de tempo que levam. A análise de uma instrução SQL não requer acesso ao banco de dados e pode ser feita muito rapidamente. Por outro lado, a otimização é um processo que exige muito uso da CPU e requer acesso ao catálogo do sistema. Para uma consulta complexa e multitabela, o otimizador pode explorar milhares de maneiras diferentes de realizar a mesma consulta. No entanto, o custo de execução ineficiente da consulta geralmente é tão alto que o tempo gasto na otimização é mais do que recuperado com o aumento da velocidade de execução da consulta. Isso será ainda mais significativo se o mesmo plano de acesso otimizado puder ser usado repetidamente para realizar consultas repetitivas.