Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
1 Introdução a Banco de Dados – DCC 011 Processamento e Otimização de Consultas Introdução a Banco de Dados – DCC 011 Processo de Execução de uma Consulta 2 Introdução a Banco de Dados – DCC 011 Otimização de Consultas SQL � Em algumas linguagens de consulta, a estratégia de execução é definida pela maneira como o usuário (ou programador) expressa a consulta � Em SQL, que é uma linguagem declarativa, apenas os resultados desejados são especificados � Portanto, a otimização de consultas é necessária em SGBDs relacionais baseados em SQL Introdução a Banco de Dados – DCC 011 Otimização de Consultas SQL � Passos principais � Tradução da consulta SQL para a álgebra relacional � Otimização do resultado � Estratégias de otimização � Otimização baseada em heurísticas � Otimização baseada na estimativa de custo da consulta � Otimização semântica 3 Introdução a Banco de Dados – DCC 011 Tradução de Consultas SQL para Expressões da AR � Consultas SQL são decompostas em blocos � Cada bloco é transformado em uma expressão da álgebra relacional � Os blocos são otimizados internamente, levando- se em consideração a ordem de execução entre eles � Um bloco contém um único comando SELECT- FROM-WHERE, incluindo cláusulas GROUP BY e HAVING, se houver Introdução a Banco de Dados – DCC 011 Exemplo de Tradução de uma Consulta SQL SELECT LNAME, FNAME FROM EMPLOYEE WHERE SALARY > ( SELECT MAX (SALARY) FROM EMPLOYEE WHERE DNO = 5); SELECT MAX (SALARY) FROM EMPLOYEE WHERE DNO = 5 SELECT LNAME, FNAME FROM EMPLOYEE WHERE SALARY > C piLNAME, FNAME (σSALARY>C(EMPLOYEE)) �MAX SALARY (σDNO=5 (EMPLOYEE)) 4 Introdução a Banco de Dados – DCC 011 Otimização Baseada em Heurísticas � Consultas são representadas internamente na forma de uma árvore ou grafo � Árvores de consulta são preferidas para a otimização pois determinam a ordem de execução das operações � Grafos de consulta indicam apenas as operações e os respectivos operandos envolvidos � portanto, existe apenas um grafo correspondente a cada consulta � Regras heurísticas são usadas para alterar a representação interna (árvore ou grafo) de uma consulta de modo a otimizar a sua execução � Por exemplo: operações de projeção e seleção são aplicadas antes de uma junção � O plano de execução gerado determina a ordem em que as operações serão executadas e os recursos a serem utilizados (por ex., índices) Introdução a Banco de Dados – DCC 011 Exemplo Preliminar Consulta Q2 (Cap. 5 e 8): Para cada projeto localizado em ‘Stafford’, recupere o número do projeto, o número do departamento responsável e o último nome, o endereço e a data de nascimento do gerente do departamento. Consulta SQL: SELECT P.PNUMBER, P.DNUM, E.LNAME, E.ADDRESS, E.BDATE FROM PROJECT AS P, DEPARTMENT AS D, EMPLOYEE AS E WHERE P.DNUM=D.DNUMBER AND D.MGRSSN=E.SSN AND P.PLOCATION=‘STAFFORD’; Álgebra Relacional: pipipipiPNUMBER, DNUM, LNAME, ADDRESS, BDATE (((σσσσPLOCATION=‘STAFFORD’(PROJECT)) DNUM=DNUMBER (DEPARTMENT)) MGRSSN=SSN (EMPLOYEE)) 5 Introdução a Banco de Dados – DCC 011 Árvore de Consulta pipipipiPNUMBER, DNUM, LNAME, ADDRESS, BDATE (((σσσσPLOCATION=‘STAFFORD’(PROJECT)) DNUM=DNUMBER (DEPARTMENT)) MGRSSN=SSN (EMPLOYEE)) Introdução a Banco de Dados – DCC 011 Árvore Canônica SELECT P.PNUMBER, P.DNUM, E.LNAME, E.ADDRESS, E.BDATE FROM PROJECT AS P, DEPARTMENT AS D, EMPLOYEE AS E WHERE P.DNUM=D.DNUMBER AND D.MGRSSN=E.SSN AND P.PLOCATION=‘STAFFORD’; 6 Introdução a Banco de Dados – DCC 011 Otimização Heurística � Parte de uma árvore “canônica”, obviamente ineficiente, mas fácil de ser construída � No exemplo anterior, considerando-se que � P tem 100 tuplas de 100 bytes � D tem 20 tuplas de 50 bytes � E tem 5000 tuplas de 150 bytes os produtos cartesianos resultariam em 10 milhões de tuplas de 300 bytes cada � Transformações a partir da árvore canônica usam regras de equivalência entre expressões da álgebra relacional para melhorar progressivamente o plano de execução da consulta Introdução a Banco de Dados – DCC 011 Exemplo Consulta SQL: SELECT LNAME FROM EMPLOYEE, WORKS_ON, PROJECT WHERE PNAME = ‘AQUARIUS’ AND PNUMBER=PNO AND ESSN=SSN AND BDATE > ‘DEC-31-1957’; Álgebra Relacional (Expressão Canônica): pipipipiLNAME (σσσσPNAME=‘AQUARIUS’ AND PNUMBER=PNO AND ESSN=SSN AND BDATE>‘DEC-31-1957’ (EMPLOYEE × WORKS_ON × PROJECT)) 7 Introdução a Banco de Dados – DCC 011 Exemplo: etapa 1 A árvore canônica é construída diretamente a partir da consulta SQL Introdução a Banco de Dados – DCC 011 Exemplo: etapa 2 A condição de seleção é desmembrada e as duas operações de seleção (sobre BDATE e PNAME) são aplicadas antes dos produtos cartesianos, para reduzir o número de tuplas resultantes 8 Introdução a Banco de Dados – DCC 011 Exemplo: etapa 3 As posições das relações EMPLOYEE e PROJECT são trocadas para que a condição de seleção mais restritiva (PNAME=‘Aquarius’) seja executada primeiro Introdução a Banco de Dados – DCC 011 Exemplo: etapa 4 Produtos cartesianos seguidos de seleção são substituídos por junções 9 Introdução a Banco de Dados – DCC 011 Exemplo: etapa 5 A cada passo, são mantidas apenas os atributos necessários (operações de projeção são deslocadas para baixo) Introdução a Banco de Dados – DCC 011 Regras de Transformação � R1. Cascata de seleções: σ<cond1 E cond2 E ... E condn>(R) = σ<cond1>(σ<cond2>(... σ<condn>(R)) � R2. Comutatividade de seleções: σ<cond1>(σ<cond2>(R)) = σ<cond2>(σ<cond1>(R)) � R3. Cascata de projeções: pi<lista1>(pi<lista2>(R)) = pi<lista1>(R) � R4. Comutatividade da seleção e projeção pi<lista>(σ<cond>(R)) = σ<cond>(pi<lista>(R)) 10 Introdução a Banco de Dados – DCC 011 Regras de Transformação (cont.) � R5. Comutatividade da junção e do produto cartesiano R × S = S × R R S = S R � R6. Comutatividade da seleção e junção ou produto cartesiano (θ = { , ×}) σ<cond>(R θ S) = (σ<cond>(R)) θ S � R7. Comutatividade da projeção e junção ou produto cartesiano (θ = { , ×}) pi<lista>(R θ S) = (pi<listaR>(R)) θ (pi<listaS>(S)) � R8. Comutatividade da união e da interseção R ∪ S = S ∪ R R ∩ S = S ∩ R Introdução a Banco de Dados – DCC 011 Regras de Transformação (cont.) � R9. Associatividade da junção, produto cartesiano, união e interseção (θ = { , × , ∪ , ∩}) (R θ S) θ T = R θ (S θ T) � R10. Comutatividade da seleção e das operações de conjunto (união, interseção e diferença) σ<cond>(R θ S) = σ<cond>(R) θ σ<cond>(S) � R11. Comutatividade da projeção e união pi<lista>(R ∪ S) = pi<lista>(R) ∪ pi<lista>(S) � R12. Conversão da sequência seleção/produto cartesiano em junção σc(R × S) = R c A 11 Introdução a Banco de Dados – DCC 011 Passos para Otimização de uma Árvore Canônica do Tipo SPJ 1. Usando a regra R1, desmembre a condição (conjuntiva) da operação de seleção. 2. Usando as regras R2 e R6, reposicione as condições de seleção e junção de forma que elas possam ser aplicadas o mais cedo possível. 3. Usando as regras R5 e R9, reposicione as relações de forma que condições de seleção mais restritivas possam ser aplicadas mais cedo. 4. Usando a regra R12, converta as sequências de operações de seleção e produto cartesiano em junções. 5. Usando as regras R3, R4 e R7, desmembre a lista de atributos da operação de projeção de forma que operações de projeção específicas possam ser executadas mais cedo. Introdução a Banco de Dados – DCC 011 Exercício Seja o banco de dados de uma livraria representado pelo seguinte esquema relacional: Editora(CodEditora,NomeEditora) Livro(CodLivro,Titulo,Autor,Assunto,AnoPub,CodEditora) Instituicao(CodInst,NomeInst,Sigla,Local) Adotado-por(CodLivro,CodInst,AnoAdocao) Dada a consulta SQL SELECT NomeInst FROM Instituicao WHERE CodInst IN (SELECT CodInst FROM Adotado-por WHERE AnoAdocao = ‘2007’ AND CodLivro IN (SELECT CodLivro FROM Livro WHERE Assunto = ‘Portugues’ AND CodEditora IN (SELECT CodEditora FROM Editora WHERE NomeEditora = ‘Editora Campus’))) reescreva-a de forma não-aninhada, gere a sua árvore canônica e, usando as regras de transformação, derive a árvore de consulta que corresponda à sequência de operações da álgebra relacional mais eficiente para a sua execução.