Compartilhar via


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.

Etapas para processar uma instrução SQL

Para processar uma instrução SQL, um DBMS executa as cinco etapas a seguir:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.