Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Exercício Planos de Execução - 
Custos
Considere o seguinte esquema de banco de dados:
 
• Disciplina(DID, Dnome, PID) 
• Professor(PID, Pnome, Dept) 
• Aula(DID,Dia_Semana, Sala, Horario)
 
• Considere a seguinte consulta sobre este banco de 
dados: “Quais os nomes dos professores que 
ministram disciplinas às sextas-feira na sala 1F250 ?”.
Suponha que os seguintes dados sejam conhecidos:
 
• DID é chave da tabela Disciplina
• Tabela Disciplina tem 100 páginas,
• PID é chave de Professor
• Tabela Professor tem 100 páginas
• {DID,Dia_Semana} é chave da tabela Aula
• Tabela Aula tem 900 páginas.
• Tem-se 10 valores para o atributo Sala.
• Os 10 valores do atributo Sala estão uniformemente distribuídos na tabela Aula, isto é, 
para cada valor tem-se o mesmo número de tuplas com este valor na tabela Aula.
• Os valores dos dias de semana são 6: segunda, terça, quarta, quinta, sexta e sábado.
• Os valores dos horários são 15: 5 na parte da manhã, 5 na parte da tarde e 5 à noite. 
Pede-se:
a. Escreva um comando SQL padrão para esta consulta.
b. Dê o plano de execução canônico correspondente, lembrando que a polí ca 
seguida pelo o mizador no caso de múl plas junções é a polí ca “le linear” 
(isto é, em cada junção, a relação à DIREITA é sempre uma relação de base). 
No plano de execução canônico, suponha que a projeção e seleção sejam 
executadas “on the fly” e que o algoritmo “simple nested loop join” seja 
u lizado para as junções. Sempre que puder, realize junções em pipeline.
Observação: 4 planos canônicos le linear podem ser gerados, alternando-se os 
2 Joins e alternando-se as relações do 1º Join. Os 4 planos são gerados e o 
mais eficiente é considerado para as o mizações futuras.
Solução
• Escreva um comando SQL padrão para esta 
consulta.
• SELECT P. Pnome
FROM Disciplina D, Professor P, Aula A 
WHERE D.DID = A. DID AND D.PID = P.PID
AND A.DIA_Semana = ‘sexta-feira’ AND 
A.Sala = ‘1F250’;
• Plano 1
Construção de Temp1 (1eira. Junção)
 Custo = 100 + 100*100 = 10.100 I/Os
 Tamanho de Temp1 = 200*5/6 = 167
Observação: Repare que Temp1 não será gravada, pois a operação 
de junção acima será feita em pipeline.
Custo do 2º Join (em Did)
Custo = 167*900 = 150.300 I/Os
Custo total do plano 1 = 10.100 + 150.300 = 160.400 I/Os
 
• Plano 2
Construção de Temp1 (1eira junção)
Custo = 100 + 100*100 = 10.100 I/Os
Tamanho de Temp1 = 200*5/6 = 167 
Observação: Repare que Temp1 não ser gravada, pois a 
operação de junção acima será feita em pipeline.
Custo do 2º Join (em Did)
Custo = 167*900 = 150.300 I/Os
Custo total do plano = 10.100 + 150.300 = 160.400 I/Os 
 
• Plano 3
 Construção de Temp1
Custo = 100 + 900*100 = 100 + 90000 = 90.100
 Tamanho de Temp1 = 1800*6/7 = 1543
Custo do 2º Join (em Pid) 
Custo = 1543*100 = 154.300
Custo total do plano = 90.100 + 154.300 = 244.400 I/Os
• Plano 4
Construção de Temp1
Custo = 900 + 900*100 = 900 + 90000 = 90.900
 Tamanho de Temp1 = 1800*6/7 = 1543
Custo do 2º Join (em Pid) Custo = 1543*100 = 154.300
Custo total do plano = 90.900 + 154.300 = 245.200 I/Os
• Plano 5 (4 o mizado)
Custo do plano: Leitura da tabela A = 900
Tamanho da seleção = 900/60 = 15
Custo do primeiro join: 15*100 = 1.500
Tamanho da primeira junção: 30*6/7=26
Custo do segundo join: 26*100 = 2.600
Custo total do plano = 900 + 1.500 + 2.600 = 5000 I/Os
• Plano 6 (3 o mizado)
Custo de criação de Temp1 = 900 (Temp1 = σ(A) ) Tamanho de 
Temp1 = 900/(6*10) = 900/60 = 15
Custo de gravar Temp1 = 15
Custo do 1º Join = 100 + 100*15 = 1.600 
Resultado do 1º Join = Temp2 
Tamanho de Temp2 = 30*6/7 = 26
Custo do 2º Join (pode ser feito em pipeline) pois a tabela à 
direita (P) está materializada:
 26*100 = 2.600
Custo total = 900 + 15 + 1.600 + 2.600 = 5.115 I/Os
Não 
precisa

Mais conteúdos dessa disciplina