of 13/13
Geração de Planos de Execução - Planos para Consultas Aninhadas AULA 28 Profa. Sandra de Amo GBC053 – BCC

Geração de Planos de Execução - Planos para Consultas Aninhadas

  • View
    30

  • Download
    3

Embed Size (px)

DESCRIPTION

Geração de Planos de Execução - Planos para Consultas Aninhadas. AULA 28 Profa. Sandra de Amo GBC053 – BCC. Consultas com uma única relação no FROM. Quando não se tem nenhum índice nos atributos aparecendo no WHERE SCAN para selecionar as tuplas satisfazendo a condição do WHERE - PowerPoint PPT Presentation

Text of Geração de Planos de Execução - Planos para Consultas Aninhadas

  • Gerao de Planos de Execuo - Planos para Consultas Aninhadas AULA 28Profa. Sandra de AmoGBC053 BCC

  • Consultas com uma nica relao no FROMQuando no se tem nenhum ndice nos atributos aparecendo no WHERESCAN para selecionar as tuplas satisfazendo a condio do WHEREAo mesmo tempo (on the fly) aplica-se a projeo nos atributos do SELECTGrava-se o resultado Ordena-se o resultado para implementar o GROUP BY e eliminar duplicatas (caso for solicitado na consulta DISTINCT)

  • Consultas com uma nica relao no FROMQuando se tem ndices nos atributos aparecendo no WHERE (em FNC)Gera plano(s) utilizando o(s) ndice(s) referente(s) ao(s) atributo(s) com maior fator de reduo.Gera plano(s) utilizando os indices para cada atributo que os tenha, ordena os rids por page ids e faz-se a interseco dos pages idsProjees so executadas on the fly.Em caso de Group By (ou de DISTINCT) : grava-se o resultado obtido aps a seleo, ordena-se as tuplas e executa o agrupamento, eliminando-se duplicatas se for o caso.

  • Consultas com vrias relaes no FROM S considera os planos com profundidade esquerda.

  • Planos de execuo para mltiplos Join A B C D ABCDABCDBACDPLANOS LINEARESPLANO BUSHY PLANO POR PROFUNDIDADE ESQUERDA

  • Planos por profundidade esquerdaSo os nicos a serem considerados:Quanto maior o nmero de joins maior o nmero de planos alternativos. Por isto opta-se por considerar somente os left-deep.Planos left-deep permitem utilizar estratgia pipeline esquerda com a relao externa. A relao interna sempre uma relao de base (materializada). Repare que no possvel utilizar pipeline direita de um join. sempre necessrio que a relao interna esteja disponvel em sua integralidade, pois varrida diversas vezes. No caso de planos left-deep, este problema no acontece, pois o filho direita de um Join sempre uma relao de base (materializada).

  • Enumerao dos planos com profundidade esquerdaPasso 1: Enumera-se todos os planos de 1 nica relao Ri, considerando-se todas as possveis selees sobre atributos de Ri que podem ser feitas antes dos Join, alm de projees de atributos no mencionados no SELECT ou nos Joins ou no restante dos atributos do WHERE que no foram empurradospara dentro do Join.Escolhe-se os melhores planos de 1 nica relao.Passo 2: Gera-se todos os planos de 2 relaes, considerando-se todas as combinaes de planos obtidos no passo 1Sempre que o algoritmo do JOIN permitir, a relao externa no materializada, e o JOIN executado em pipelineCaso o mtodo de JOIN um INDEX NESTED LOOP JOIN, considera-se planos para a relao interna que no envolvam indices em atributos diferentes do atributo de juno.Escolhe-se os melhores planos de 2 relaes.Passo 3: Gera-se todos os planos com 3 relaes, combinando-se cada plano otimal obtido no passo 2 com cada plano otimal obtido no Passo 1. Passo 4: assim por diante

  • Planos para Consultas AninhadasSELECT S.snameFROM Sailors SWHERE S.rating = (SELECT MAX (S2.rating) FROM Sailors S2)

    Subconsulta interna: SELECT MAX (S2.rating) FROM Sailors S2

    Executada uma nica vez, produzindo um nmero X

    SELECT S.snameFROM Sailors SWHERE S.rating = X

  • SELECT S.snameFROM Sailors SWHERE S.sid IN (SELECT R.sid FROM Reserves R WHERE R.bid = 103)Estratgia de execuo comum Subconsulta interna avaliada e materializada (T)Faz-se um Join Sailors = relao externa T = relao interna (subconsulta sempre relao interna)Alguns SGBDs tm estratgias mais sofisticadas:Pode tranformar T em relao externa do Join e Sailors na interna, caso for mais vantajoso, por exemplo, se Sailors possui indice Hash no atributo sid Planos para Consultas Aninhadas

  • SELECT S.snameFROM Sailors SWHERE S.sid IN (SELECT R.sid FROM Reserves R WHERE R.bid = 103)O Plano de execuo cannico para esta consulta o mesmo plano (otimizado) produzido pelo otimizador para a consulta:

    SELECT S.snameFROM Reservas R, Sailors SWHERE R.Sid = S.Sid AND R.bid = 103)

    Um bom programador pode guiar o otimizador, dirigindo-o para o melhor plano de execuo.Um bom programador pode forar o otimizador a produzir um plano que no seria produzido automaticamente.

    Planos para Consultas Aninhadas

  • Tratamento de Consultas Aninhadas CorrelatasSELECT S.snameFROM Sailors SWHERE EXISTS (SELECT * FROM Reserves R WHERE R.bid = 103 AND S.sid = R.sid)Consulta externa e interna so correlatas: atributo sid da externa aparece na consulta interna.No possvel avaliar a consulta interna uma nica vez.Estratgia tpica de execuo: consulta interna calculada para cada tupla de S

  • Aninhadas versus no-aninhadasUma consulta aninhada frequentemente equivalente a uma no aninhada.Consultas aninhadas correlatas frequentemente tm uma verso sem correlao.Um otimizador tipico capaz de encontrar um bom plano de execuo se dispe de uma verso no-aninhada ou sem correlaes.Boa parte dos otimizadores no so capazes de transformar consultas aninhadas em no aninhadas ou de eliminar correlaes.Assim, fica a cargo do programador formular a consulta de modo a evitar aninhamentos e/ou correlaes.

  • FIM

    Boa Prova Final e Boas Frias !!!

    ********