Otimização de Consultas em SQL Planos Alternativos AULA 24 Profa. Sandra de Amo GBC053 – BCC 2012-2.
Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12...
Transcript of Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12...
![Page 1: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/1.jpg)
Método de Acesso Dinâmico: B-Tree - Busca e InserçãoChaves de busca sem duplicatas
AULA 12Profa. Sandra de Amo
GBC053 – BCC
![Page 2: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/2.jpg)
B-Trees : Método de Acesso Dinâmico Nós internos da árvore são alterados à medida que novos registros são
inseridos nas folhas, ou quando registros são deletados.
Quando tais nós são alterados ? Operações de inserção e deleção são balanceadas de modo a que cada
nó interno tenha uma ocupação mínima e máxima. Uma ocupação mínima de 50% é garantida em cada nó (exceto a raiz)
Arvore é Balanceada Todos os caminhos da raiz até a folha têm o mesmo comprimento. Cada nó (exceptuando a raiz) contém m entradas, onde d ≤ m ≤ 2d, d = ordem da B-tree A raiz contém m entradas onde 1 ≤ m ≤ 2d
Páginas das folhas são ligadas em sequência através de ponteiros – podem ser percorridas em sequência nas duas direções.
Altura da árvore : Devido ao grande espalhamento da árvore, sua altura é raramente maior do que 4
![Page 3: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/3.jpg)
Formato de um nó interno
P0 P1 P2 Pi Pi+1 PmK1 ... ...K2 K3 Ki+1 Km
Pi = ponteiros que apontam para um núm. de página no nível imediatamente inferior
Ki = valor do atributo chave do índice. Exemplo: se o atributo chave é idade então Ki é um valor de idade.
K < Ki+1 K ≥ Ki+1
Valores K da chave nesta página são < Ki+1
Valores K da chave nesta página são ≥ Ki+1
![Page 4: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/4.jpg)
Busca (entradas sem duplicatas)
13 17 24 30
Ordem = 2 : cada nó interno contém K entradas, 2 K 4Chave de busca contém chave candidata (não há duplicatas)
2* 3* 7*5* 14*16* 19*20* 22* 24*27*29* 33*34* 39*38*
15 ?5 ?
![Page 5: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/5.jpg)
Inserção
13 17 24 30
2* 3* 7*5* 14*16* 19*20* 22* 24*27*29* 33*34* 39*38*
Se nó onde deve ocorrer a inserção não está cheio
Exemplo inserindo 23 *
23*
![Page 6: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/6.jpg)
Inserção: se nó onde deveria ocorrer a inserção já está cheio Opção 1 : Se nó está cheio divida e ajuste os nós
ancestrais. Opção 2 : Testa primeiro se pode redistrisbuir num
nó vizinho. Em caso negativo, divide.
Ideal Nós intermediários: sempre dividir, não redistribuir Nós Folha: procure redistribuir entre os vizinhos
Se tiver espaço no vizinho direito, redistribua. Caso contrário, verifica se tem espaço no
vizinho esquerdo, e redistribua Caso contrário: divida a folha cheia.
![Page 7: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/7.jpg)
Inserção : Testando vizinho à direita
13 17 24 30
7*5* 14*16* 19*20* 22* 24*27*29* 33*34* 39*38*
Inserindo 6*
6*
14* 16*2* 3*
CHEIA !!
![Page 8: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/8.jpg)
Inserção : Testando vizinho à direita
13 17 24 30
7*5* 14*16* 19*20* 22* 24*27*29* 33*34* 39*38*
Inserindo 6*
14*16*2* 3*
7*5*2* 3* 6*
![Page 9: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/9.jpg)
Inserção : Testando vizinho à direita
13 17 24 30
5* 14*16* 19*20* 22* 24*27*29* 33*34* 39*38*
Inserindo 6*
14*16*2* 3*
7*5*2* 3* 6*
7*
7*
6*
![Page 10: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/10.jpg)
Resumo:
Inserção da chave X na folha P P está cheia Vizinho à direita VD tem espaço e pai(VD) = pai(P)
Insere X em P Obtém página P’ com 2d+1 elementos Transfere último elemento Y de P’ para primeira posição de VD Seja Pai = pai(VD) = pai(P)
Pti = ponteiro de Pai apontando para VD
Ki = chave em Pai antes de Pti
Substitui Ki por Y
![Page 11: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/11.jpg)
Exercicio
Inserir a chave 30*
13 17 24 32
7*5* 14*16* 19*20* 22* 24*27* 28* 33*34* 38*2* 3* 29*14*16*
![Page 12: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/12.jpg)
Inserção : Testando vizinho à esquerda
8 17 24 30
7*5* 14*16* 19*20* 22* 24*27*29* 33*34* 39*38*
Inserindo 35*
8* 14* 16*2* 3*
33*34* 39*38*35*
![Page 13: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/13.jpg)
Inserção : Testando vizinho à esquerda
8 17 24
7*5* 14*16* 19*20* 22* 24*27*29* 33* 35* 39*38*
Inserindo 35*
8* 14* 16*2* 3* 34*
34
![Page 14: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/14.jpg)
Resumo:
Inserção da chave X na folha P P está cheia Vizinho à direita VD
não tem espaço ou não existe ou pai(VD) ≠ pai(P)
Vizinho à esquerda VE tem espaço e pai(VE) = pai(P) Insere X em P Obtém página P’ com 2d+1 elementos Transfere primeiro elemento Y de P’ para última posição de VE Seja Pai = pai(P) = pai(VE) Pti = ponteiro de Pai apontando para P
Ki = chave em Pai antes de Pti
Substitui Ki por Y
![Page 15: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/15.jpg)
Exercicio
Inserir a chave 25*
13 17 24 32
7*5* 14*16* 19*20* 22* 24*27* 28* 33*34* 38*14*16*2* 3* 29* 39*
![Page 16: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/16.jpg)
Discussão
Distribuição nas folhas vizinhas não acarreta mudança aumento de ocupação dos nós pais
Portanto: Nós pais não ultrapassam ocupação máxima Não precisam ser divididos nem redistribuídos
entre seus vizinhos Não há crescimento da altura da árvore Modificações não se propagam para nós
acima do nó-pai
![Page 17: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/17.jpg)
Inserção : Vizinhos estão cheios Divisão da Folha
13 17 24 30
2* 3* 7*5* 13*14* 19*20* 22* 24*27*29* 33*34* 39*38*
Inserindo 8*
Cheia !
7* 8*55*
Cheia !
15*16*
2* 3* 7*5* 8*
![Page 18: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/18.jpg)
Divisão de nós intermediários
13 17 24 305
2* 3* 7*5* 13*14* 19*20* 22* 24*27*29* 33*34* 39*38*7* 8*55* 15*16*
![Page 19: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/19.jpg)
Divisão de nó intermediário
13 24 305
17
2* 3* 7*5* 14*16* 19*20* 22* 24*27*29* 33*34* 39*38*7* 8*55*
![Page 20: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/20.jpg)
Resumo: Divisão de Folha
Inserção da chave X na folha P P está cheia Vizinho à direita VD não tem espaço ou não existe ou pai(VD) ≠
pai(P) Vizinho à esquerda VE não tem espaço ou não existe ou pai(VE)
≠ pai(P) Insere X em P Obtém página P’ com 2d+1 elementos Divide página P em duas páginas P1 e P2
P1 tem d elementos P2 tem d+1 elementos
Pai = pai(P) Elimina ponteiro de Pai que aponta para P Y = primeiro elemento de P2 Insere novo nó Y em Pai Insere dois novos ponteiros em Pai
à esquerda de Y apontando para P1 à direita de Y apontando para P2
Se Pai ultrapassar tamanho máximo : Divide(Pai)
![Page 21: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/21.jpg)
Resumo: Divisão de nó intermediário
Divide(P), P = nó intermediário, P ≠ raiz
Tamanho(P) = 2d+1 X = chave do meio de P Divide P em P1 e P2
P1 contém os d primeiros elementos de P P2 contém os d últimos elementos de P
Seja Pai = pai(P) Insere X em Pai Elimina ponteiro de Pai que apontava para P Insere dois novos ponteiros em Pai
à esquerda de X apontando para P1 à direita de X apontando para P2
Se Pai ultrapassar tamanho máximo : Divide(Pai)
![Page 22: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/22.jpg)
Resumo: Divisão de Raiz
Divide(P), P = nó intermediário, P = raiz
Tamanho(P) = 2d+1 X = chave do meio de P Divide P em P1 e P2
P1 contém os d primeiros elementos de P P1 contém os d últimos elementos de P
Cria novo nó raiz R com única chave X, em nível acima do nível dos nós P1 e P1
Insere dois ponteiros em Rà esquerda de X apontando para P1 à direita de X apontando para P2
![Page 23: Método de Acesso Dinâmico: B-Tree - Busca e Inserção Chaves de busca sem duplicatas AULA 12 Profa. Sandra de Amo GBC053 – BCC.](https://reader036.fdocument.pub/reader036/viewer/2022062318/552fc132497959413d8d6a58/html5/thumbnails/23.jpg)
Exercicio: Insira (49,*)
25 34 45 55
17*19* 24*23* 26* 28* 35*37* 38* 46*47* 54* 56*58* 65*60*40* 48*
8 11
12* 15*14*
16
8* 10*9*
2* 6*5*