Processamento e Otimização de Consultas

Propaganda
Processamento e Otimização de
Consultas
Introdução a Banco de Dados – DCC 011
Processo de Execução de uma Consulta
Introdução a Banco de Dados – DCC 011
1
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
Introdução a Banco de Dados – DCC 011
2
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, levandose em consideração a ordem de execução entre
eles
Um bloco contém um único comando SELECTFROM-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
FROM
WHERE
SELECT
FROM
WHERE
LNAME, FNAME
EMPLOYEE
SALARY > (
SELECT
FROM
WHERE
LNAME, FNAME
EMPLOYEE
SALARY > C
πLNAME, FNAME (σSALARY>C(EMPLOYEE))
MAX (SALARY)
EMPLOYEE
DNO = 5);
SELECT
FROM
WHERE
MAX (SALARY)
EMPLOYEE
DNO = 5
MAX SALARY (σDNO=5 (EMPLOYEE))
Introdução a Banco de Dados – DCC 011
3
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:
πPNUMBER, DNUM, LNAME, ADDRESS, BDATE (((σ
σPLOCATION=‘STAFFORD’(PROJECT))
DNUM=DNUMBER (DEPARTMENT))
MGRSSN=SSN (EMPLOYEE))
Introdução a Banco de Dados – DCC 011
4
Árvore de Consulta
πPNUMBER, DNUM, LNAME, ADDRESS, BDATE (((σ
σPLOCATION=‘STAFFORD’(PROJECT))
(DEPARTMENT))
DNUM=DNUMBER
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’;
Introdução a Banco de Dados – DCC 011
5
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):
πLNAME (σ
σPNAME=‘AQUARIUS’ AND PNUMBER=PNO AND ESSN=SSN AND BDATE>‘DEC-31-1957’
(EMPLOYEE × WORKS_ON × PROJECT))
Introdução a Banco de Dados – DCC 011
6
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
Introdução a Banco de Dados – DCC 011
7
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
Introdução a Banco de Dados – DCC 011
8
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:
π<lista1>(π<lista2>(R)) = π<lista1>(R)
R4. Comutatividade da seleção e projeção
π<lista>(σ<cond>(R)) = σ<cond>(π<lista>(R))
Introdução a Banco de Dados – DCC 011
9
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 (θ = { , ×})
π<lista>(R θ S) = (π<listaR>(R)) θ (π<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
π<lista>(R ∪ S) = π<lista>(R) ∪ π<lista>(S)
R12. Conversão da sequência seleção/produto
cartesiano em junção
σc(R × S) = R c A
Introdução a Banco de Dados – DCC 011
10
Passos para Otimização de uma
Árvore Canônica do Tipo SPJ
1.
2.
3.
4.
5.
Usando a regra R1, desmembre a condição (conjuntiva)
da operação de seleção.
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.
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.
Usando a regra R12, converta as sequências de
operações de seleção e produto cartesiano em junções.
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.
Introdução a Banco de Dados – DCC 011
11
Download