Bacharelado em Ciência da Computação – UFU
Disciplina GBC053 – Gerência de Banco de Dados
Profa. Sandra de Amo
Lista dos exercícios feitos em sala de aula – Preparação Prova 3
Exercicio 1. Seja R(A,B,C) relação com 1000 páginas, e um buffer com 41 páginas.
Considere a seguinte consulta:
SELECT R.A, Sum(B)
FROM R
GROUP BY R.A
Pede-se:
a) Estime o custo de I/O desta consulta utilizando a técnica de hash para fazer o
agrupamento. Descreva como é realizado o algoritmo do Group By.
b) Estime o custo de I/O desta consulta utilizando a técnica de ordenação para
fazer o agrupamento. Descreva como é realizado o algoritmo do Group By.
c) Analise os custos comparativos dos dois algoritmos utilizados. O algoritmo
hash é sempre o melhor ?
Exercicio 2. Considere os esquemas relacionais:
Estudante(ENUM, ENOME, Curso, Idade, Periodo)
Aula(DId;DiaSemana,Sala, Horario)
Disciplina(DId,Dnome,PId)
Prof(PId, PNome, Dept)
Matriculado(ENUM,DNome)
Considere a seguinte consulta SQL sobre este banco de dados:
Para cada valor de idade que aparece na tabela Estudante, encontre o período que aparece mais
frequentemente. (Por exemplo, se existe mais alunos com 20 anos cursando o 3o periodo do que
cursando os demais periodos, então o par (20,3) deve ser retornado.)
Um usuário entra o seguinte comando SQL para esta consulta:
SELECT DISTINCT E.Idade, E.Periodo
FROM ESTUDANTE E
GROUP BY E.Idade, E.Periodo
HAVING E.Periodo IN
(SELECT E1.Periodo
FROM ESTUDANTE E1
WHERE E1.Idade = E.Idade
GROUP BY E1.Periodo
HAVING COUNT(*) >= ALL (SELECT COUNT(*)
FROM ESTUDANTE E2
WHERE E1.Idade = E2.Idade
GROUP BY E2.Periodo))
Pede-se:
a) Determinar a sequência de blocos simples SQL produzidos pelo parser do SQL para
este comando SQL entrado pelo usuário.
b) Estime o tamanho da resposta fornecida por cada bloco. Para isto, suponha que a
tabela Estudante tem 1000 páginas, e que não existe nenhum indice no atributo
idade.
Exercicio 3 Diga se é verdadeira ou falsa as equivalências abaixo: em caso de ser
verdadeira, prove. Em caso de ser falsa, dê contra-exemplo ou alguma justificativa
referente ao esquema relacional da expressão:
a) ΠA (R – S) = (ΠA R – ΠAS), onde R(A,B), S(A,B)
b) σA = a( R – S) = (σA = a R - σA = a S), onde R(A,B), S(A,B)
c)
σA = a ( R – S) = (R - σA = a S), onde R(A,B), S(A,B)
d) σA = a ( R – S) = (σA = a R - S), onde R(A,B), S(A,B)
e) σA = a ( R Join S) = (σA = a R Join σA = a S), onde R(A,B), S(A,C), junção é feita pelo
atributo A
f) σA = a ( R Join S) = (σA = a R Join σA = a S), onde R(A,B,C), S(A,C,D), junção é feita
pelo atributo C
g) σA = a ( R Join S) = (σA = a R Join S), onde R(A,B,C), S(A,C,D), junção é feita pelo
atributo C
h) ΠABC (R Join S) = (ΠAB R Join ΠAC S), onde R(ABD), S(ACE), atributo de junção =A
i) ΠBC (R Join S) = (ΠB R Join ΠC S), onde R(ABD), S(ACE), atributo de junção =A
j) ΠBC (R Join S) = ΠBC (ΠAB R Join ΠAC S), onde R(ABD), S(ACE), atributo de junção =A
Exercicio 4 Suponha as seguintes informações armazenadas sobre as tabelas R(A,B,C) e S(A,D,E) no
catálogo:
NTuples (R) = 100000
NPages(R) = 1000
Ntuples(S) = 50.000
Npages(S) = 500
Suponha que existam dois índices já criados na tabela R: I e H. O índice I é do tipo B-Tree, com chave A e
o índice H é hash sobre o atributo B. As seguintes estatísticas estão armazenadas no momento no
catálogo referentes a estes índices:
NKeys(I) = 20
Nkeys (H) = 10
INPages(I) = 200
INPages (H) = 50
IHeight(I) = 4
ILow(I) = 10
IHigh(I) = 250
Calcule o tamanho das respostas das seguintes consultas:
a) SELECT *
FROM R
WHERE R.A = 10
b) SELECT *
FROM R
WHERE R.A = 10 AND R.B = 30
c) SELECT *
FROM R
WHERE R.A = 10 OR R.B = 30
d) SELECT *
FROM R,S
WHERE R.A = S.A AND R.C = 10
e) SELECT *
FROM R,S
WHERE R.A = S.A OR R.C = 10
e) SELECT S.D, S.E
FROM R , S
WHERE R.A = S.A AND R.C = 10
Exercicio 5. Suponha uma relação R(A,B,C) com 100 tuplas, sendo que o valor do
atributo A varia de 1 a 98. As tabelas abaixo descrevem para cada valor do atributo A
(coluna à esquerda) o número de tuplas de R possuindo este valor do atributo A
(coluna à direita).
Vlr
N.Tup
Vlr
N.Tup
1
3
58
2
4
10 60
7
6
4
63
3
10
3
65
4
22
8
76
3
31
9
78
7
35
2
80
2
43
5
84
4
47
7
93
3
53
8
98
6
Pede-se:
1. Descrever uma distribuição uniforme para estes dados.
2. Fazer um histograma por largura .
3. Estimar o número de tuplas com valores > 30, supondo uma distribuição
uniforme
4. Estimar o número de tuplas com valores > 30, supondo uma distribuição de
acordo com o histograma por largura.
Exercício 6. Considere os mesmos dados do exercício anterior.
Pede-se:
1. Fazer um histograma por profundidade .
2. Estimar o número de tuplas com valores > 30, supondo uma distribuição de
acordo com o histograma por largura.
3. Qual a melhor estimativa ?
Exercicio 7. Considere os mesmos dados do exercicios anterior.
1. Suponha que o SGBD mantenha um histograma comprimido, mantendo um
contador para os valores mais frequentes que são 4 e 31, e utilizando um
histograma em largura para os demais valores. Fazer o histograma em
profundidade, neste caso.
2. Estimar o número de tuplas com valores > 30, supondo os contadores para os
valores 4 e 31 e o historgrama por profundidade feito no item anterior.
3. Compare o resultado com as estimativas dos exercicios anteriores e diga qual
seria a melhor estimativa a seu ver.
Cálculo de Custos de Planos de
Execução
Exercício – AULA 27 –
26/03/2013
Bacharelado em Ciência da Computação – UFU
Disciplina GBC053 – Gerência de Banco de Dados
Profa. Sandra de Amo
Exercício1 :
Calcule o custo deste plano
Π sname
On-the-fly
R : 1000 páginas
σ bid=100 and rating > 5
S : 500 páginas
R: 100 tuplas por página
S: 80 tuplas por página
Simple Nested Loops página a página
sid=sid
Reservas
(scan)
Sailors
(scan)
Tabela externa
“Empurrando” seleções para baixo na
árvore de execução
Exercicio 2:
Calcule o custo deste plano
Π sname
Número de valores para bid = 100
sid=sid Sorte-Merge Join
Numero de páginas no buffer = 5
σ
σ rating > 5
Reservas
(scan)
Scan, write to Temp2
Sailors
(scan)
Tabela externa
Tabela interna
“Empurrando” projeções para baixo na
árvore de execução
Π sname
Rating varia de 1 a 10
Uniformemente distribuídos
Número de páginas no buffer = 5
Scan, write to Temp1
Rating varia de 1 a 10
Uniformemente distribuidos
sid=sid Block Nested Looping Join
sid=sid Block Nested Looping Join
Π sid,sname
σ bid=100
σ rating > 5
Tabela externa
σ
σ rating > 5
bid=100
Reservas
(scan)
Scan, write to Temp2
Sailors
(scan)
Tabela externa
Tabela interna
Nem sempre “empurrar seleções
abaixo do join é vantajoso”
Π sname
On-the-fly
Número de valores para bid = 100
Π sid
Reservas
(scan)
Scan, write to Temp1
Exercício 5 :
Calcule o custo deste plano
On-the-fly
Número de valores para bid = 100
On-the-fly
On-the-fly
Numero de páginas no buffer = 5
bid=100
Exercicio 4 :
Calcule o custo deste plano
Π sname
Número de valores para bid = 100
Rating varia de 1 a 10
Uniformemente distribuidos
Scan, write to Temp1
Tabela interna
“Empurrando” seleções para baixo na
árvore de execução
Exercicio 3 :
Calcule o custo deste plano
On-the-fly
On-the-fly
Rating varia de 1 a 10
Uniformemente distribuídos
Número de páginas no buffer = 5
σ rating > 5
On-the-fly
sid=sid
Scan, write to Temp2
Sailors
(scan)
On-the-fly
σbid=100
(tem índice hash em bid, Reservas
agrupado e estático)
Tabela externa
On-the-fly
Index Nested Loops com pipeline
Sailors (tem índice hash em sid, não
necessariamente agrupado)
Tabela interna
Tabela interna
1
Nem sempre execuções em pipeline são
mais vantajosas que as materializadas
Exercício 6 :
Calcule o custo deste plano
•Número de valores para bid = 100
•Rating varia de 1 a 10
uniformemente distribuídos
• Número de páginas no buffer = 5
• Todos os marinheiros fizeram reservas
de barcos.
• Reservas distribuidas uniformemente
entre os marinheiros.
• Todos os barcos foram reservados um
mesmo número de vezes
Scan, write to Temp
ordena por sid
Π sname
On-the-fly
σ rating > 5
sid=sid
σbid=100
(tem índice hash em bid, Reservas
agrupado e estático)
Tabela externa
On-the-fly
Index Nested Loops
Seleção por atributo chave “empurrada” abaixo
do Join é muito vantajosa.
Exercício 7 :
Calcule o custo deste plano
•Número de valores para bid = 100
•Rating varia de 1 a 10
uniformemente distribuídos
• Número de páginas no buffer = 5
• Todos os marinheiros fizeram reservas
de barcos.
• Reservas distribuidas uniformemente
entre os marinheiros.
• (bid,day) é chave de Reservas
On-the-fly
Sailors (tem índice hash em sid)
Tabela interna
Π sname
On-the-fly
σ rating > 5
sid=sid
On-the-fly
Index Nested Loops com pipeline
σday = 09/09/82
Sailors (tem índice hash em sid)
On-the-fly
σ
(tem índice hash em bid,
agrupado e estático)
Reservas
bid=100
Tabela externa
Tabela interna
Compare com o custo do plano
do exercicio 1.
2
Exercicio 15 . Suponha relações R(A,B,C) com 5000 páginas de 200 tuplas cada,
S(A,D) com 2000 páginas de 100 tuplas cada.
•
•
•
•
A é chave de S
S tem indice hash em D, e indice hash em A
R tem índice B-Tree em B
O sistema mantém um histograma em profundidade para os valores do
atributo B de R. Os valores de B variam de 1 a 10.
o Faixa [1-2] = 198000 tuplas
o Faixa [3-5] = 202.000 tuplas
o Faixa [6-7] = 200.000 tuplas
o Faixa [8] = 200.000 tuplas
o Faixa [9-10] = 200.000 tuplas
•
O sistema não mantém histogramas para os valores dos atributos da relação S
Pede-se:
1. Propor um plano de execução que julgue otimal para a seguinte consulta SQL, e
calcule seu custo I/O. Justifique por que você acha que este plano é otimal
SELECT R.C
FROM R, S
WHERE R.B > 7 AND S.D = d AND S.A = R.A
2. Na aula de revisão de 06/04/2013 foram propostos pelos alunos dois planos
de execução (plano A e plano B), descritos nas figuras abaixo. Qual destes
planos é o melhor ? Responda à questão, calculando os custos de I/O de cada
um dos planos.
3. Responda às questões propostas no quadro do PLANO A.
A Typical Query Optimizer
153
SELECT S.sname, P.pname
FROM
Suppliers S, Parts P, Supply Y
WHERE S.sid = Y.sid AND Y.pid = P.pid AND
S.city = ‘Madison’ AND P.price ≤ 1,000
1. What information about these relations does the query optimizer need to select a
good query execution plan for the given query?
2. How many different join orders, assuming that cross-products are disallowed, does
a System R style query optimizer consider when deciding how to process the given
query? List each of these join orders.
3. What indexes might be of help in processing this query? Explain briefly.
4. How does adding DISTINCT to the SELECT clause affect the plans produced?
5. How does adding ORDER BY sname to the query affect the plans produced?
6. How does adding GROUP BY sname to the query affect the plans produced?
Answer 15.8 Answer omitted.
Exercise 15.9 Consider the following scenario:
Emp(eid: integer, sal: integer, age: real, did: integer)
Dept(did: integer, projid: integer, budget: real, status: char(10))
Proj(projid: integer, code: integer, report: varchar)
Assume that each Emp record is 20 bytes long, each Dept record is 40 bytes long, and
each Proj record is 2000 bytes long on average. There are 20,000 tuples in Emp, 5000
tuples in Dept (note that did is not a key), and 1000 tuples in Proj. Each department,
identified by did, has 10 projects on average. The file system supports 4000 byte pages,
and 12 buffer pages are available. All following questions are based on this information.
You can assume uniform distribution of values. State any additional assumptions. The
cost metric to use is the number of page I/Os. Ignore the cost of writing out the final
result.
1. Consider the following two queries: “Find all employees with age = 30” and
“Find all projects with code = 20.” Assume that the number of qualifying tuples
is the same in each case. If you are building indexes on the selected attributes to
speed up these queries, for which query is a clustered index (in comparison to an
unclustered index) more important?
2. Consider the following query: “Find all employees with age > 30.” Assume that
there is an unclustered index on age. Let the number of qualifying tuples be N .
For what values of N is a sequential scan cheaper than using the index?
154
Chapter 15
3. Consider the following query:
SELECT *
FROM
Emp E, Dept D
WHERE E.did=D.did
(a) Suppose that there is a clustered hash index on did on Emp. List all the
plans that are considered and identify the plan with the lowest estimated
cost.
(b) Assume that both relations are sorted on the join column. List all the plans
that are considered and show the plan with the lowest estimated cost.
(c) Suppose that there is a clustered B+ tree index on did on Emp and Dept is
sorted on did. List all the plans that are considered and identify the plan
with the lowest estimated cost.
4. Consider the following query:
SELECT
FROM
WHERE
GROUP BY
D.did, COUNT(*)
Dept D, Proj P
D.projid=P.projid
D.did
(a) Suppose that no indexes are available. Show the plan with the lowest estimated cost.
(b) If there is a hash index on P.projid what is the plan with lowest estimated
cost?
(c) If there is a hash index on D.projid what is the plan with lowest estimated
cost?
(d) If there is a hash index on D.projid and P.projid what is the plan with lowest
estimated cost?
(e) Suppose that there is a clustered B+ tree index on D.did and a hash index
on P.projid. Show the plan with the lowest estimated cost.
(f) Suppose that there is a clustered B+ tree index on D.did, a hash index
on D.projid, and a hash index on P.projid. Show the plan with the lowest
estimated cost.
(g) Suppose that there is a clustered B+ tree index on D.did, D.projid and a
hash index on P.projid. Show the plan with the lowest estimated cost.
(h) Suppose that there is a clustered B+ tree index on D.projid, D.did and a
hash index on P.projid. Show the plan with the lowest estimated cost.
5. Consider the following query:
A Typical Query Optimizer
SELECT
FROM
WHERE
GROUP BY
155
D.did, COUNT(*)
Dept D, Proj P
D.projid=P.projid AND D.budget>99000
D.did
Assume that department budgets are uniformly distributed in the range 0 to
100,000.
(a) Show the plan with lowest estimated cost if no indexes are available.
(b) If there is a hash index on P.projid show the plan with lowest estimated cost.
(c) If there is a hash index on D.budget show the plan with lowest estimated
cost.
(d) If there is a hash index on D.projid and D.budget show the plan with lowest
estimated cost.
(e) Suppose that there is a clustered B+ tree index on D.did,D.budget and a
hash index on P.projid. Show the plan with the lowest estimated cost.
(f) Suppose there is a clustered B+ tree index on D.did, a hash index on D.budget,
and a hash index on P.projid. Show the plan with the lowest estimated cost.
(g) Suppose there is a clustered B+ tree index on D.did, D.budget, D.projid
and a hash index on P.projid. Show the plan with the lowest estimated cost.
(h) Suppose there is a clustered B+ tree index on D.did, D.projid, D.budget
and a hash index on P.projid. Show the plan with the lowest estimated cost.
6. Consider the following query:
SELECT E.eid, D.did, P.projid
FROM
Emp E, Dept D, Proj P
WHERE E.sal=50,000 AND D.budget>20,000
E.did=D.did AND D.projid=P.projid
Assume that employee salaries are uniformly distributed in the range 10,009 to
110,008 and that project budgets are uniformly distributed in the range 10,000 to
30,000. There is a clustered index on sal for Emp, a clustered index on did for
Dept, and a clustered index on projid for Proj.
(a) List all the one-relation, two-relation, and three-relation subplans considered
in optimizing this query.
(b) Show the plan with the lowest estimated cost for this query.
(c) If the index on Proj were unclustered, would the cost of the preceding plan
change substantially? What if the index on Emp or on Dept were unclustered?
Download

Lista 4 - Reunidos