Passos para executar o plano
Cada etapa do plano de execução retorna um conjunto de linhas que são usadas na próxima etapa ou, na etapa final, retornadas ao usuário ou aplicativo que emitiu a instrução SQL. O conjunto de linhas retornado por cada etapa é chamado de origem da linha. Figura 5-1 Um diagrama em árvore mostra o fluxo de dados de uma caminhada para outra. A numeração de cada etapa reflete a ordem em que as etapas são mostradas quando você visualiza o plano de execução (como visualizar o plano de execução é explicado resumidamente). Geralmente esta não é a ordem em que cada etapa é executada. Cada etapa do plano de execução recupera linhas do banco de dados ou recebe dados de linha como entrada de uma ou mais fontes de linha:
As etapas indicadas pelas caixas vermelhas recuperam fisicamente os dados dos arquivos de dados no banco de dados. Esta etapa é chamada de caminho de acesso. Os caminhos de acesso que podem ser usados no Oracle serão apresentados em detalhes posteriormente:
As etapas 3 e 6 leem todas as linhas da tabela EMP e da tabela SALGRADE respectivamente.
A etapa 5 procura cada valor DEPTNO retornado pela etapa 3 no índice PK_DEPTNO. Ele descobre os ROWIDs das linhas associadas à tabela DEPT.
A etapa 4 recupera da tabela DEPT as linhas cujo ROWID é retornado na etapa 5.
As etapas indicadas pela caixa de texto preta operam na origem da linha, como associação, classificação ou filtragem entre 2 tabelas. Introduções detalhadas serão fornecidas posteriormente:
A etapa 2 implementa operações de loop aninhado (equivalente a loops aninhados em instruções C), recebe as fontes de linha das etapas 3 e 4 e compara cada linha da fonte na etapa 3 com sua origem de linha na etapa 4. As linhas correspondentes são concatenadas e as linhas resultantes são retornadas à etapa 1.
A etapa 1 conclui uma operação de filtro. Ele recebe as fontes de linha das etapas 2 e 6, elimina as linhas da etapa 2 que possuem linhas correspondentes na etapa 6 e retorna as linhas restantes da etapa 2 para o usuário ou aplicativo.
Implementar a sequência de etapas do plano de execução
As etapas do plano de execução não são implementadas na ordem em que são numeradas: o Oracle primeiro implementa as etapas que aparecem como folhas no gráfico da estrutura em árvore da Figura 5-1 (por exemplo, etapas 3, 5 e 6). As linhas retornadas por cada etapa são chamadas de fontes de linha da próxima etapa. A Oracle então implementa a etapa pai.
Por exemplo, para executar a instrução da Figura 5-1, o Oracle implementa essas etapas na seguinte ordem:
Primeiro, o Oracle implementa a etapa 3 e retorna as linhas de resultados para a etapa 2, linha por linha.
Para cada linha retornada na etapa 3, a Oracle implementa estas etapas:
-- O Oracle implementa a etapa 5 e retorna o resultado ROWID para a etapa 4.
-- O Oracle implementa a etapa 4 e retorna a linha do resultado para a etapa 2.
-- O Oracle implementa a etapa 2 e aceitará uma linha da etapa 3 e uma linha da etapa 4 e retornará
Dê uma linha à etapa 1.
-- O Oracle implementa a etapa 6. Se houver uma linha de resultado, retorne-a para a etapa 1.
-- O Oracle implementa a etapa 1. Se uma linha for retornada da etapa 6, o Oracle retornará a linha da etapa 2 para
O usuário que emitiu a instrução SQL.
Observe que o Oracle executa as etapas 5, 4, 2 e 6 uma vez para cada linha retornada pela etapa 3. Muitas etapas pai exigem apenas uma única linha de suas etapas filhas antes de serem executadas. Para tal etapa pai, a etapa pai (e possivelmente o restante do plano de execução) é implementada assim que uma única linha for retornada da etapa filho. Se a etapa pai da etapa pai também puder ser ativada por meio de um retorno de linha única, ela também será executada. Portanto, as execuções podem ser encadeadas na árvore, possivelmente incluindo o restante do plano de execução. Para tais operações, você pode usar first_rows como alvo de otimização para responder rapidamente às solicitações do usuário.
Para cada linha recuperada por uma etapa filha, o Oracle implementa a etapa pai e todas as etapas concatenadas uma vez. As etapas pai que são acionadas para cada linha retornada por uma etapa filho incluem acesso à tabela, acesso ao índice, junções de loop aninhadas e filtros.
Algumas etapas pai exigem todas as linhas das etapas filho antes de serem implementadas. Para tal etapa pai, o Oracle não pode implementar a etapa pai até que todas as linhas tenham sido retornadas da etapa filho. Essas etapas principais incluem Classificar, Classificar-Mesclar Junção, Função de Grupo e Total. Para tal operação, first_rows não pode ser usado como alvo de otimização, mas all_rows pode ser usado como alvo de otimização para fazer com que esse tipo de operação consuma menos recursos.
Às vezes, quando uma instrução é executada, ela não ocorre passo a passo conforme mencionado acima, mas pode ser executada em paralelo. Por exemplo, em um ambiente real, as etapas 3, 5 e 4 podem ser executadas em paralelo para obter melhor eficiência. No diagrama em árvore acima, é difícil ver a ordem em que cada operação é executada. Porém, através de outra forma de plano de execução gerado pelo ORACLE, é fácil ver qual operação é executada primeiro e qual é executada depois. O plano de execução é o que realmente precisamos e será explicado em detalhes posteriormente.
Este artigo vem do blog CSDN. Por favor, indique a fonte ao reimprimir: http://blog.csdn.net/lcyhjx/archive/2009/12/20/5044799.aspx.
-