RESPOSTAS
Exercícios
Estruturas de indexação e algoritmos de processamento de consultas
Considere a seguinte relação Aluno:
codAluno
1
2
3
4
5
6
7
8
9
10
11
12
...
1000
nome
Ana
Paulo
José
Maria
Marcos
Mariana
Juliana
Eduardo
Ronaldo
Carlos
Pedro
Sérgio
cidade
POA
Gravataí
POA
Canoas
Canoas
POA
Canoas
POA
Viamão
Viamão
Gravataí
POA
codCurso
1
1
2
4
6
4
7
9
11
4
7
7
renda
1300.50
2641.56
1300.50
2300.54
2300.57
3300.88
2300.98
4305.38
3137.38
2360.28
2370.88
1360.98
Vando
POA
5
1500.52
Estruturas básicas de indexação. Considere as situações:
1. Supondo que o arquivo físico de dados está ordenado pelo campo chave codAluno.
i. Dos tipos de índices vistos até o momento, qual tipo poderia ser criado para este
campo (primário, secundário, clustering)? Esparso ou denso? Justifique.
• Primário: poderia, pois o arquivo está ordenado pelo campo codAluno;
além disso, codAluno é chave primária, e geralmente chaves primárias são
indexadas por índices primários;
• Secundário: não poderia, pois o arquivo precisaria estar ordenado por
outra coluna que não a coluna a ser indexada (codAluno);
• Clustering: não poderia, pois o arquivo precisaria estar ordenado por uma
coluna não chave.
Esparso ou denso: ambos seriam possíveis, embora geralmente utilizem-se
índices esparsos para índices primários. É mais rápido localizar um registro se
tivermos um índice denso do que um índice esparso. Entretanto, os índices
esparsos têm vantagem sobre os densos por exigirem menos espaço e menos
sobrecarga de manutenção para inserções e exclusões.
ii. Qual seria o arquivo de índices correspondente a este campo, considerando um índice
primário esparso com 10 entradas?
valorChave
1
101
201
301
401
501
601
701
801
901
ponteiro
2.
1
101
201
301
401
501
601
701
801
901
Supondo que um bloco armazene 10 tuplas do arquivo de dados da relação Alunos.
i. Quais acessos/operações de acessos seriam feitos para selecionar a tupla do aluno de
código 214, supondo um índice esparso primário na coluna codAluno, com 10
entradas no arquivo de índices, e supondo que o arquivo de índices aponta para o
primeiro registro do bloco? Uma vez localizado o bloco, como poderia ser feita a
busca do registro dentro do bloco?
Bloco 1
Bloco
1
valorChave
ponteiro
1
...
...
...
...
2
Bloco 11
3
Bloco 21
4
Bloco 31
5
...
6
7
8
9
10
Bloco 91
Operações/acessos:
1. faça uma busca linear ou binária no arquivo de
índices, buscando pelo valor 214. Como é esparso, o
valor 214 pode não ser encontrado (de fato, não o é,
supondo uma distribuição uniforme nas entradas do
arquivo de índices), então procure o índice menor que
mais se aproxima de 214 (no caso, o 201).
2. acesse o bloco apontado pela entrada 201 (no caso, o
bloco 21)
3. faça uma busca linear ou binária entre o bloco 21
(apontado pela entrada 201) e o bloco 30 (bloco
anterior ao apontado pela entrada 301), procurando
pelo registro correspondente ao código 214
Bloco 2
11 ...
12
13
14
15
16
17
18
19
20
...
...
...
Uma forma tbém utilizada na implementação de índices
primárias esparsos é criar uma entrada no arquivo de
índices para cada valor de codAluno que encabeça um
bloco. Ex: bloco 1 começa com 1, então cria uma entrada
no arquivo de índices com o valor 1; bloco 2 começa com
11, então cria uma entrada no arquivo de índice com o
valor 11; e assim sucessivamente.
3.
Supondo que o arquivo físico de dados está ordenado pelo campo cidade.
i. Dos tipos de índices vistos até o momento, qual tipo poderia ser criado para este
campo (primário, secundário, clustering)? Esparso ou denso? Justifique.
• Primário: poderia, pois o arquivo está ordenado pelo campo cidade; no entanto,
índices primários são geralmente criados em colunas chave primária.
• Secundário: não poderia, pois o arquivo precisaria estar ordenado por outra coluna
que não a coluna a ser indexada (cidade);
• Clustering: poderia, pois o arquivo precisa estar ordenado por uma coluna não
chave, e cidade é uma coluna não chave.
Esparso ou denso: ambos seriam possíveis, embora geralmente utilizem-se índices
esparsos para índices clustering. É mais rápido localizar um registro se tivermos um
índice denso do que um índice esparso. Entretanto, os índices esparsos têm vantagem
sobre os densos por exigirem menos espaço e menos sobrecarga de manutenção para
inserções e exclusões.
ii. Qual seria o arquivo de índices correspondente a este campo, considerando um índice
esparso com 10 entradas?
valorChave
Alvorada
Canoas
Gravataí
Guaiba
Novo Hamburgo
Porto Alegre
São Leopoldo
Sapucaia
Triunfo
Viamão
ponteiro
iii. Qual seria o arquivo de índices correspondente a este campo, considerando um índice
denso? Quantas entradas existiriam no arquivo de índices?
valorChave
ponteiro
Alvorada
....
Canoas
....
.....
Gravataí
....
....
Guaiba
.....
Novo Hamburgo
Porto Alegre
São Leopoldo
....
Sapucaia
Triunfo
....
Viamão
Teria tantas entradas quanto fosse o número de cidades distintas
iv. Supondo que um bloco armazene 5 tuplas do arquivo de dados da relação Alunos.
Considere que existe um índice clustering esparso na coluna cidade.
1. Quais acessos/operações de acesso seriam feitos para selecionar as tuplas
dos alunos que moram em POA, supondo que o arquivo de índices aponta
para o primeiro registro do bloco que contém a informação pesquisada?
(considere que o grupo de registros que compartilham diferentes valores de
clustering podem estar no mesmo bloco – ver slide 13)
valorChave
Alvorada
Canoas
Gravataí
Guaiba
Novo Hamburgo
Porto Alegre
São Leopoldo
Sapucaia
Triunfo
Viamão
ponteiro
Bloco 1
Alvorada
Alvorada
Alvorada
Alvorada
Alvorada
Bloco 2
Alvorada
...
...
...
...
Canoas
Canoas
Gravataí
Gravataí
Operações/acessos:
1. faça uma busca linear ou binária no arquivo de índices, buscando pelo valor Porto Alegre. Como é
esparso, o valor Porto Alegre pode não ser encontrado; se este for o caso, então procure o índice
anterior que mais se aproxima de Porto Alegre.
2. acesse o bloco apontado pela entrada Porto Alegre ou pela entrada que mais se aproxima de Porto
Alegre
3. faça uma busca linear ou binária no bloco (s), procurando pelo primeiro registro (primeira ocorrência
do registro) desejado. Retorne todos os registros a partir do primeiro encontrado que ainda satisfazem o
critério de seleção (busca linear)
2.
valorChave
Alvorada
Canoas
Gravataí
Guaiba
Novo Hamburgo
Porto Alegre
São Leopoldo
Sapucaia
Triunfo
Viamão
Quais acessos/operações de acesso seriam feitos para selecionar as tuplas
dos alunos que moram em POA, supondo que o arquivo de índices aponta
para o primeiro registro do bloco que contém a informação pesquisada?
(considere que o grupo de registros que compartilham o mesmo valor de
clustering podem estar em blocos separados – ver slide 14)
ponteiro
Bloco 1
Alvorada
Alvorada
Alvorada
Alvorada
Alvorada
...
...
Bloco 2
Canoas
Canoas
Canoas
Bloco 3
Gravataí
Operações/acessos:
Gravataí
1. faça uma busca linear ou binária no arquivo de índices, buscando
pelo valor Porto Alegre. Como é esparso, o valor Porto Alegre pode
não ser encontrado; se este for o caso, então procure o índice anterior
que mais se aproxima de Porto Alegre.
2. acesse o bloco apontado pela entrada Porto Alegre ou pela entrada que mais se aproxima de Porto
Alegre
3. se o primeiro registro já satisfaz a consulta (entrada do arquivo de índices é Porto Alegre)
a. Então:
i. Retorne todos os registros a partir do primeiro que ainda satisfazem o critério e
seleção (busca linear)
b. Senão:
i. faça uma busca linear ou binária no bloco (s), procurando pelo primeiro registro
(primeira ocorrência do registro) desejado. Retorne todos os registros a partir do
primeiro encontrado que ainda satisfazem o critério de seleção (busca linear)
...
...
4. Algoritmos de seleção. Considere as seguintes operações:
(OP1): σ codAluno=10 (ALUNO)
(OP2): σ codCurso>5 (ALUNO)
(OP3): σ cidade=’POA’ (ALUNO)
(OP4): σ codAluno>=5 AND renda>2000 AND cidade=‘Gravatai’ (ALUNO)
(OP5): σ codAluno>10 (ALUNO)
Suponha as seguintes situações:
i. Não existe índice em nenhum campo no arquivo de dados e o arquivo físico de dados
está ordenado pelo campo codAluno.
1. Qual algoritmo de seleção você utilizaria para executar a OP1?
(OP1): σ codAluno=10 (ALUNO)
Linear (S1); ou
Pesquisa binária (S2)
ii. Não existe índice em nenhum campo no arquivo de dados e o arquivo físico de dados
está ordenado pelo campo codAluno.
1. Qual algoritmo de seleção você utilizaria para executar a OP3?
(OP3): σ cidade=’POA’ (ALUNO)
Linear (S1)
iii. O arquivo físico de dados está ordenado pelo campo chave codAluno; existe um
índice primário esparso na coluna codAluno, com 10 entradas no arquivo de índices.
1. Quais algoritmos você poderia utilizar para executar a OP1?
(OP1): σ codAluno=10 (ALUNO)
Linear (S1); ou
Pesquisa binária (S2); ou
Pesquisa indexada utilizando o índice primário (S3)
iv. O arquivo físico de dados está ordenado pelo campo cidade; existe um índice cluster
denso na coluna cidade.
1. Quais algoritmos você poderia utilizar para executar a OP3?
(OP3): σ cidade=’POA’ (ALUNO)
Linear (S1); ou
Pesquisa indexada utilizando o índice cluster para recuperar múltiplos registros
(S5)
v. O arquivo físico de dados está ordenado pelo campo codCurso; existe um índice
clustering esparso na coluna codCurso.
1. Quais algoritmos você poderia utilizar para executar a OP2?
(OP2): σ codCurso>5 (ALUNO)
Linear (S1); ou
Pesquisa indexada utilizando o índice cluster para recuperar múltiplos registros
(S5)
vi. O arquivo físico de dados está ordenado pelo campo codAluno; existe um índice
primário esparso na coluna codAluno; existe um índice secundário na coluna cidade;
1. Quais algoritmos você poderia utilizar para executar a OP4?
(OP4): σ codAluno>=5 AND renda>2000 AND cidade=‘Gravatai’ (ALUNO)
Linear (S1); ou
Seleção conjuntiva utilizando o índice individual da coluna codAluno (S7); ou
Seleção conjuntiva utilizando o índice individual da coluna cidade (S7); ou
Seleção conjuntiva por meio da interseção de registros (S9)
5.
Algoritmos de junção.
Considere a seguinte relação Curso:
codCurso
1
descricao
Ciência da computação
reprDiscente
1
dataCriacao
..
coordenador
...
2
3
4
5
6
7
8
9
10
11
12
...
50
Sistemas de Informação
Medicina
Odontologia
Biologia
Contábeis
Economia
Direito
Engenharia Civil
Engenharia Elétrica
Desenho Industrial
Fisioterapia
3
99
4
1000
5
7
88
8
67
9
34
Vando
23
...
...
Considere as seguintes operações:
(OP6): ALUNO
(OP7): CURSO
Aluno.codCurso=Curso.codCurso CURSO
curso.ReprDiscente=aluno.CodAluno ALUNO
i. Monte o código do algoritmo para a operação OP6, usando laço aninhado.
Para cada tupla tR em R faca
Para cada tupla tS em S faca
Teste o par (tR,tS) para ver se satisfazem a condição de junção
Se satisfizerem
Adicione tR,tS ao resultado
ii. Suponha que existe um índice na coluna Curso.codCurso. Para executar a operação 6,
rabisque o teste de mesa usando o algoritmo laço único.
Como existe um índice na segunda tabela S, então o algoritmo funciona da seguinte
forma:
– recupere cada registro t em R (um por vez)
• Use a estrutura de acesso para recuperar os registros em S que
satisfaçam a condição de junção
Teste de mesa:
Para o registro t em R, acesse o registro em S que satisfaz a condição de junção, usando
o índice para acessar curso.codCurso:
t1R:
1
1
Ana
POA
Recupera o registro em S, usando o índice:
Ciência da computação
1
1300.50
1
..
...
t2R:
2
1
Paulo
Gravataí
Recupera o registro em S, usando o índice:
Ciência da computação
1
2641.56
1
..
...
t3R:
3
2
José
POA
Recupera o registro em S, usando o índice:
Sistemas de Informação
3
1300.50
2
...
...
t4R:
4
4
Maria
Canoas
Recupera o registro em S, usando o índice:
Odontologia
4
4
2300.54
E assim sucessivamente, até que todos os registros de R tenham sido recuperados.
iii. Supondo que os arquivos físicos de dados das relações aluno e curso estão ordenados
pelos atributos de junção. Para executar a operação 6, rabisque o teste de mesa
usando o algoritmo ordenação-fusão.
codAluno
1
2
3
4
6
10
1000
5
7
11
12
8
9
...
codCurso
1
2
3
4
5
6
7
8
9
10
11
12
...
50
Varrer ambos arquivos simultaneamente
– Fazendo a correspondência dos registros que possuem os mesmos valores
para os atributos de junção
Tabela aluno ordenada pelo atributo de junção:
nome
cidade
Ana
POA
Paulo
Gravataí
José
POA
Maria
Canoas
Mariana
POA
Carlos
Viamão
Vando
POA
Marcos
Canoas
Juliana
Canoas
Pedro
Gravataí
Sérgio
POA
Eduardo
POA
Ronaldo
Viamão
codCurso
1
1
2
4
4
4
5
6
7
7
7
9
11
Tabela curso ordenada pelo atributo de junção:
descricao
reprDiscente
Ciência da computação
1
Sistemas de Informação
3
Medicina
99
Odontologia
4
Biologia
1000
Contábeis
5
Economia
7
Direito
88
Engenharia Civil
8
Engenharia Elétrica
67
Desenho Industrial
9
Fisioterapia
34
Vando
dataCriacao
..
...
renda
1300.50
2641.56
1300.50
2300.54
3300.88
2360.28
1500.52
2300.57
2300.98
2370.88
1360.98
4305.38
3137.38
coordenador
...
...
23
Teste de mesa:
Pegar o primeiro registro de aluno (R): codCurso=1
Pegar o primeiro registro de curso (S): codCurso=1
Casou (são iguais), então manda pro resultado
Pegar o segundo registro de aluno (R): codCurso=1
Pega o primeiro registro de curso (S): codCurso=1
Casou (são iguais), então manda pro resultado
Pegar o terceiro registro de aluno (R): codCurso=2
Como o terceiro registro de R (codCurso=2) não casa mais com o primeiro registro de
S (codCurso=1), anda uma posição em S e pega o segundo registro de S
Casou (são iguais), então manda pro resultado
Pegar o quarto registro de aluno (R): codCurso=4
Como o quarto registro de R (codCurso=4) não casa mais com o segundo registro de S
(codCurso=2), anda uma posição em S e pega o terceiro registro de S
Como o quarto registro de R (codCurso=4) não casa com o terceiro registro de S
(codCurso=3), anda uma posição em S e pega o quarto registro de S
Casou (são iguais), então manda pro resultado
E assim sucessivamente.....
6. Algoritmos de projeção. Considere as seguintes operações:
(OP8): π codAluno, nomeAluno (ALUNO)
(OP9): π nomeAluno(σcidade = ‘POA’ (ALUNO))
i. Quais os possíveis algoritmos para executar a operação OP8?
Como a lista de atributos projetados inclui a chave primária da tabela, basta projetar os dois atributos
pedidos, enviando-os pro resultado
custo = varredura de R; custo=Br
custo = bR (gera bRes blocos de resultado)
ii. Suponha que existe um índice clustering na coluna cidade e o arquivo de dados está
fisicamente ordenado pelo campo cidade. Quais os possíveis algoritmos para
executar a operação OP9?
Seleção:
Pode ser linear (S1)
Pode ser uma busca indexada (S5: Utilização de um índice cluster para recuperar múltiplos registros)
Projeção:
Como a lista de atributos projetados não inclui a chave primária da tabela, temos que projetar o atributo
solicitado e eliminar eventuais duplicatas.
custo = (1) varredura de R + (2) eliminação de duplicatas
custo de (1) = bR (gera bRes blocos de resultado)
custo de (2) = custo de eliminar as duplicatas (classificar o resultado pelos atributos da projeção e eliminar
tuplas idênticas consecutivas)
Logo: pode ser seleção linear com projeção eliminando duplicatas, ou seleção indexada (usando o índice
cluster para recuperar múltiplos registros) com projeção eliminando duplicatas.
7.
Considere a seguinte operação:
(OP10): π nomeAluno, descricao (σcidade = ‘POA’ (ALUNO
aluno.codCurso=Curso.codCurso
CURSO))
Suponha que existe um índice primário na coluna Aluno.codAluno e o arquivo de alunos esteja ordenado
fisicamente pelo campo codAluno. Suponha que existe um índice secundário na coluna cidade. Suponha que
exista um índice primário na coluna Curso.CodCurso e o arquivo de cursos esteja ordenado fisicamente pelo
campo codCurso. Quais as possíveis combinações de algoritmos podem ser utilizadas para responder a consulta
OP10? (Dica: veja os possíveis algoritmos que podem ser utilizados para executar cada uma das operações
individualmente e depois verifique as combinações possíveis).
Junção:
J1. Junção de laço aninhado (nested loop) - força bruta. Sempre é possível
J2. Junção de laço único (single loop): como existe uma estrutura de acesso para para curso.codCurso, pode-se
usar este algoritmo:
– Se existir um índice para um dos dois atributos de junção (curso.codCurso)
– recupere cada registro t em aluno (um por vez)
Use a estrutura de acesso para recuperar os registros em curso que satisfaçam a
condição de junção
J3: junção ordenação-fusão (sort-merge). Como aluno está ordenado por codAluno e curso está ordenado por
codcurso, não é possível usar o algoritmo J3 (junção ordenação-fusão - sort-merge), pois este algoritmo exige
que os registros das duas tabelas estejam ordenados pelos valores dos atributos da junção.
Seleção:
Pode ser linear (S1)
Pode ser uma busca indexada (S6. Utilização de um índice secundário em uma comparação de igualdaderecuperar múltiplos registros se o campo de indexação não for chave)
Projeção:
Como a lista de atributos projetados não inclui a chave primária da tabela, temos que projetar os atributos
solicitados e eliminar eventuais duplicatas.
Os algoritmos possíveis incluem a combinação das diversas opções:
1. Junção de laço aninhado com seleção linear e projeção com eliminação de duplicatas
2. Junção de laço aninhado com seleção indexada (S6) e projeção com eliminação de duplicatas
3. Junção de laço único com seleção linear e projeção com eliminação de duplicatas
4. Junção de laço único com seleção indexada (S6) e projeção com eliminação de duplicatas
Download

Aula 2.2 - Exercicios RESPOSTAS