Vous êtes sur la page 1sur 57

Mdulo V: Indexao em Banco de Dados

(Aulas 1, 2 e 3)
Clodis Boscarioli
Banco de Dados I
2007
Agenda:
Estruturas de ndices;
Conceitos;
Tipos de ndices:
Primrios;
Secundrios;
Clustering;
Multinveis;
rvore B e B+;
Hash;
Exemplos.
ndice - Conceitos
Estrutura de dados que recebe como entrada
uma propriedade de registro (por exemplo, um
valor de um ou mais campos) e encontra os
registros com essa propriedade rapidamente;
Um ndice permite localizar um registro sem
ter que examinar mais que uma pequena
frao dos registros possveis;
O(s) campo(s) cujos valores o ndice se
baseia formam a chave de pesquisa;
ndices so, portanto, estruturas de dados
auxiliares cujo nico propsito tornar mais
rpido o acesso a registros baseado em certos
campos, chamados campos de indexao.
Blocos contendo
registros
ndice(valor)
Registros
coincidentes
ndice primrio - baseado na chave de ordenao;
ndice de agrupamento (clustering) - baseado no campo de
ordenao no-chave de um arquivo;
ndice secundrio - baseado em qualquer campo no ordenado
de um arquivo;
ndices multinveis;
rvores B e B+;
Tabelas Hash;
Estruturas de ndices
ndices sobre Arquivos Seqenciais
Tipos de ndices
10
20
30
40
50
60
Densos: uma entrada no arquivo de ndices
p/cada registro no arquivo de dados
Esparsos: apenas alguns registros de dados
so representados no arquivo de ndices
10
20
30
40
50
60
10
30
50
70
90
110
10
20
30
40
50
60
130
150
70
80
Um ndice denso sobre um arquivo
de dados seqenciais
Um ndice esparso sobre um
arquivo de dados seqenciais
70
80
70
80
Tipos de ndices
ndice Denso
Seqncia de blocos contendo apenas as chaves dos
registros e os ponteiros para os prprios registros
ndice denso = (chave-ponteiro, registro)
ndice Esparso
Usa menos espao de armazenamento que o ndice
denso ao custo de um tempo um pouco maior para
localizar um registro dada a sua chave
ndice esparso = (chave-ponteiro, blocos de dados)
Aponta para o 1o. registro do bloco
ndices Primrios
Modelo simples;
Arquivo classificado (com dados) + arquivo de ndices;
Par (chave de pesquisa, ponteiro);
Tuplas so classificadas pela chave primria;
til quando a chave de pesquisa a chave primria;
10
20
30
40
50
60
A
r
q
u
i
v
o

s
e
q

e
n
c
i
a
l
ndice primrio para o campo-chave de
classificao do arquivo.
Exemplo:
ndice clustering para o campo
NUM_DEPARTAMENTO, que no
campo-chave de classificao, de um
arquivo EMPREGADO.
Exemplo:
ndice clustering com um grupo (cluster)
separado de blocos para cada grupo de
registros que compartilhem o mesmo valor
de campo clustering.
Exemplo:
Fatores de eficincia do uso de ndices
O nmero de blocos de ndices em geral pequeno
quando comparado com o nmero de blocos de dados;
Tendo em vista que as chaves so classificadas, a
pesquisa rpida (pode-se usar um algoritmo de
pesquisa binria);
O ndice pode ser pequeno o bastante para ser mantido
permanentemente em buffers da memria principal.
Nesse caso, uma pesquisa para uma determinada chave
envolve apenas acessos memria principal, sem
precisar de operao de I/O.
ndices Secundrios
O campo de indexao um campo no ordenado do arquivo
de dados. Podem haver muitos ndices secundrios para um
mesmo arquivo.
Dois casos:
O campo de indexao um campo chave (s vezes
chamado de chave secundria).
O campo de indexao no chave.
ndices Secundrios
possvel que mais de um registro
tenha o valor da chave. Isso
ocorre, por exemplo, quando a
chave de pesquisa no a
chave primria;
Soluo: usar chave associada a
um ponteiro para o primeiro dos
registros com a chave K
Vantagem: otimizar as consultas
10
20
30
40
10
10
10
20
30
30
40
40
ndice denso quando so permitidas
chaves de pesquisa duplicadas
M
a
i
s

d
e

u
m

r
e
g
i
s
t
r
o

c
o
m

o

v
a
l
o
r

d
e

u
m
a

d
e
t
e
r
m
i
n
a
d
a

c
h
a
v
e
Outro Esquema para ndices Secundrios
A entrada de ndice para um bloco de
dados a menor chave de pesquisa
que nova, isto , a chave no
apareceu em um bloco anterior;
Se no h chave de pesquisa nova no
bloco, ento sua entrada de ndice
contm a nica chave de pesquisa
encontrada nesse bloco;
Pode-se encontrar os registros de uma
chave de pesquisa K examinando-se o
ndice p/a primeira entrada cuja chave
:
Igual a K
Menor que K, mas a prxima
chave maior que K
Segue-se o ponteiro da entrada. Se for
encontrado pelo menos um registro
com a chave de pesquisa K, ento a
busca continua em blocos adicionais,
at encontrar todos os registros com a
chave de pesquisa K.
10
20
30
30
40
50
10
10
10
20
20
30
60
70
30
30
ndice esparso indicando a nova chave
de pesquisa mais baixa em cada bloco
40
50
ndice secundrio denso
(com ponteiros de bloco)
em um campo no chave
de classificao de um
arquivo.
Exemplo:
ndices Secundrios sobre
Campos No Chave
Vrios registros do arquivo de dados podem ter o
mesmo valor para o campo de indexao.
Opo 1: Vrias entradas no ndice com o mesmo
valor, uma para cada registro. ndice denso.
Opo 2: Uma entrada no ndice para cada valor X
do campo de indexao, com lista de ponteiros.
ndice no denso.
Opo 3: Uma entrada no ndice para cada valor X
do campo de indexao, com um ponteiro para o
bloco que contm a lista de ponteiros para os
registros com o valor X. ndice no denso.
Sumrio:
Tipos de ndices
Campo de Ordenao Campo No Ordenado
Campo chave ndice Primrio ndice Secundrio
(Chave)
Campo No ndice de ndice Secundrio
Chave Agrupamento (No chave)
Tipo de ndice Nmero de Entradas Denso ou Esparso
Primrio Nmero de blocos no Esparso
arquivo de dados
Agrupamento Nmero de valores Esparso
distintos do campo de
indexao
Secundrio Nmero de registros Denso
(chave) no arquivo de dados
Secundrio Nmero de registros Denso
no arquivo de dados
(no chave) ou
Nmero de valores Esparso
distintos do campo de
indexao
P
r
o
p
r
i
e
d
a
d
e
s

d
o
s

n
d
i
c
e
s
ndice secundrio (com ponteiros de
registro), em um campo que no
campo-chave, implementado em um
nvel adicional, indireto, de forma que
as entradas de ndice sejam de
tamanho fixo e possuam valores de
campo nicos.
Exemplo:
ndices de Mltiplos Nveis
Motivao: se o arquivo
de ndices se torna
muito grande para
ser armazenado em
bloco de disco, interessante
index-lo em mais de um nvel
Vantagem: ndice pequeno pode
ser mantido em memria e o
tempo de busca mais baixo
Desvantagem: muitos
nveis de ndices
podem aumentar a
complexidade do
sistema (talvez seja
melhor usar a rvore-B)
10
90
170
250
330
410
10
30
50
70
90
110
490
570
130
150
170
110
130
150
10
20
30
40
50
60
70
80
90
100
Esparso ou denso Esparso
Um ndice multinvel um ndice de ndice.
Primeiro nvel: arquivo ordenado pela chave de
indexao, valores distintos, entradas de tamanho
fixo.
Demais nveis: ndice primrio sobre o ndice do
nvel anterior e assim sucessivamente at que no
ltimo nvel o ndice ocupe apenas um bloco.
Nmero de acessos a bloco: um a cada nvel de
ndice, mais um ao bloco do arquivo de dados.
ndices de Mltiplos Nveis
ndice primrio de dois nveis que se
parece com a organizao ISAM (Indexed
Sequential Acess Method Mtodo de
Acesso Seqencial Indexado).
Exemplo:
ndices de Mltiplos Nveis
Problema dos ndices multinveis: ndices so
arquivos fisicamente ordenados, portanto,
ineficientes na insero e remoo.
Soluo:
Deixar algum espao em cada um dos blocos
para insero de novas entradas.
Estruturas de dados: rvores B e suas
variaes.
Gerenciamento de ndices na
Modificaes de Dados
Problema com arquivos seqenciais: com o tempo, um
bloco no mais suficiente para armazenar o contedo
que era antes armazenado.
Como controlar o problema?
Criar blocos de estouro (overflow). Blocos de estouro
no tem entradas em um ndice esparso;
Inserir novos blocos na ordem seqencial;
Se no houver lugar para inserir informao em um
bloco, alguma informao poder ser transferida
para outro bloco. Da mesma forma, blocos vazios
podero ser combinados.
Pode ser necessrio
modificar os ndices
rvores como Estruturas de ndices
A
B
C
D
F
E
G
H
I
J
K
n raiz (nvel 0)
nvel 1
nvel 2
nvel 3
rvore de grau 3
Sub-rvore de grau 2
P
1
K
1
... K
i-1
P
i
K
i
... K
q-1
P
q
X
X
X
K
i-1
< X < K
i
K
q-1
< X
X < K
1
Um n de uma
rvore de pesquisa
5
3
1
6 9
7
8 12
Uma rvore de
busca de ordem p = 3
rvores de Busca
rvores B
rvore de busca projetada com dois objetivos:
Manter a rvore balanceada e
Evitar o desperdcio de espao dentro de um n,
custa de maior complexidade nos algoritmos de
insero e remoo.
Introduzida por: R. Bayer e E. McCreight:
Organization and Maintenance of Large Ordered
Indexes, Acta Informatica, 1(3), Feb 1972.
Revista por: D. Comer: The Ubiquitous B-tree, ACM
Computing Surveys, 11(2), 1979.
N de uma rvore B
P
1
K
1
Pr
1
P
2
... K
i-1
Pr
i-1
P
i
K
i
Pr
i
... K
q-1
Pr
q-1
P
q
X
X
X
K
i-1
< X < K
i
K
q-1
< X
X < K
1
dados
dados
p/2 < q < p
rvore B Um Exemplo:
5
3
8
1
4 6 7
9 12
Capacidade das rvores B
Objetivo: Cada n da rvore corresponde a um bloco de disco, por exemplo:
Tamanho da chave de pesquisa V = 9 bytes
Tamanho do ponteiro de blocos P = 6 bytes
Tamanho do bloco de disco B = 512 bytes
Cada n pode ter no mximo:
p-1 ponteiros de dados
p-1 valores de chave de pesquisa
p ponteiros de rvore
(p-1) x 6 + (p-1) x 9 + p x 6 512
21 x p 527
p = 25
Capacidade mxima em nmero de chaves:
24 + 25 x 24 + 25 x 25 x 24 + 25 x 25 x 25 x 24 + ...
(extremamente improvvel sob inseres e remoes aleatrias)
O nmero mnimo de chaves em um n p/2. Navathe et. Al (2005) afirmam que, por anlise
e simulao, aps vrias inseres e remoes em uma rvore B, os ns se estabilizam com
aproximadamente 69% da capacidade. Nesta situao, separao e combinao de ns
ocorrem muito raramente.
p x 0,69 = 27 x 0,69 = 17
capacidade mdia: 16 + 17 x 16 + 17 x 17 x 16 + 17 x 17 x 17 x 16 + ...
16 288 4.912 83.520
rvores B+
Os ns de uma rvore-B
+
. (a) N interno de uma rvore-B
+
com q - 1 valores de busca. (b) N
folha de uma rvore-B
+
com q - 1 valores de busca e q - 1 ponteiros de dados.
Capacidade de rvores B
+
Mesmo exemplo anterior:
Tamanho da chave de pesquisa V = 9 bytes
Tamanho do ponteiro de blocos P = 6 bytes
Tamanho do bloco de disco B = 512 bytes
Cada n pode ter no mximo:
p-1 valores de chave de pesquisa
p ponteiros de rvore
(p-1) x 9 + p x 6 512
15 x p 521
p = 34 (maior do que na rvore B correspondente)
Capacidade mdia da rvore:
p x 0,69 = 34 x 0,69 = 23
22 + 23 x 22 + 23 x 23 x 22 + 23 x 23 x 23 x 22 + ...
22 528 12.166 279.840
ou seja, sua capacidade bem maior que a de uma rvore B correspondente.
5
3
7 8
8
1 3
4 5 9 12
6 7
rvore B+ Um Exemplo:
Ver slides insero e remoo Ver slides insero e remoo
Um exemplo de incluso em
uma rvore-B
+
de ordem p = 3 e
p
folha
= 2.
Exemplo:
Um exemplo de remoo em
uma rvore-B
+
.
Exemplo:
Hash Esttico
0
1
2
N-1
h
h(chave) mod N
chave
Pginas Primrias dos Buckets

Pginas de Overflow
Entradas do tipo <chave, * >
h = funo hash
ndice Estruturado por Hash
Hash Esttico - Busca
0
1
2
5
h
h(14) mod 6 = 2
14

Dados ordenados pela chave


Consultando < 14, * >
h(x) = x
N = 6
4
3
.
<14,* >
Hash Esttico - Insero
0
1
2
5
h
h(7) mod 6 = 1
7

Dados ordenados pela chave


Inserindo < 7, * >
4
3
< 7, * >
Cheia
Hash Esttico - Remoo
0
1
2
5
h
h(25) mod 6 = 1
25

Removendo < 25, * >


4
3
< 25, * >
Dados ordenados pela chave
Funo Hash
Componente importante da tcnica Hash;
Deve distribuir valores das chaves de maneira uniforme
nos buckets;
Nmero de buckets = N = parmetro;
h(x) = a*x + b
a, b: parmetros de ajuste
Hash - Custos
Pginas primrias podem ser armazenadas em
pginas de disco sucessivas.
Caso no haja overflow:
Busca requer 1 I/O
Insero e Remoo requerem 2 I/O
Custo pode ser alto se existem muitas pginas
de overflow.
Desvantagens do Hash Esttico
Nmero de buckets fixo.
Se arquivo encolhe muito, o espao
desperdiado, j que os buckets so fixos.
Crescimento do arquivo produz longas cadeias
de pginas de overflow, prejudicando o
desempenho da busca.
Hash - Alternativas
Alternativa 1:
Periodicamente modificar a funo hash e
reestruturar todo o arquivo de modo a evitar pginas
de overflow.
rehash toma muito tempo.
Indice no pode ser utilizado durante o processo de
rehash.
Alternativa 2: Hash dinmicos
Extensvel
Hash Extensvel
Soluo 1: quando algum bucket ficar cheio:
Dobrar o nmero de buckets;
Distribuir as entradas nos novos buckets.
Defeito: o arquivo todo deve ser lido e reorganizado e o
dobro de pginas devem ser escritas.
Soluo 2: utilizar um diretrio de ponteiros para os
buckets:
Dobrar o nmero de entradas no diretrio.
Separar somente os buckets que ficaram cheios.
Conveno de Notao
Bucket contendo entradas do
arquivo de ndice
25* 10* 25* 8* 8*
Representa a entrada <k,*>, onde h(k) = 25
h = funo hash fixa
Diretrio de Buckets
Diretorio: s armazena ponteiros para os buckets;
nmero de registros = nmero de buckets;
Bucket 1
Contm todas as entradas <k,*>
tais que h(k) mod N = 1
1
2
3
N
Bucket 2
Bucket 3
Hash - O que pode variar
Funo hash no varia.
O nmero N de buckets varia.
A medida que os buckets se enchem, estes se duplicam, e o diretrio
de buckets duplica.
Resultado:
se um nico bucket duplica, o diretrio todo de buckets duplica;
Dois ponteiros do diretrio podem apontar para o mesmo bucket;
S duplicam os buckets que ficam cheios;
Ao contrrio do hash esttico, registros em buckets duplicados
(decorrentes de um overflow) podem ser facilmente localizados
atravs do novo ponteiro no diretrio de buckets.
Exemplo:
00
01
10
11
2
Diretrio
Profundidade Global
4* 12* 32* 16*
2
1* 5* 21*
2
10*
2
15* 7* 19*
2
Bucket A
Bucket B
Bucket C
Bucket D
Pginas de dados
Profundidade Local
N = 4 = 2
2
ltimos
2 dgitos da
representao
binria de h(k)
Exemplo Insero
00
01
10
11
2
Diretrio
4* 12* 32* 16*
2
1* 5* 21*
2
10*
2
15* 7* 19*
2
Pginas de dados (buckets)
Inserindo 13*
13*
Exemplo Insero
00
01
10
11
2
Diretrio
4* 12* 32* 16*
2
1* 5* 21*
2
10*
2
15* 7* 19*
2
Inserindo 20*
13*
4* 12* 20*
2
32* 16*
2
Exemplo Insero
00
01
10
11
2
Diretrio
1* 5* 21*
2
10*
2
15* 7* 19*
2
Inserindo 20*
13*
4* 12* 20*
3
32* 16*
3
000
001
010
011
100
101
110
111
3
Global
Local
Bucket A1
Bucket A2
Bucket D
Bucket C
Bucket C
N = 8 = 2
3
ltimos
3 dgitos da
representao
binria de h(k)
Exemplo Insero
110
2
Diretorio
4* 12* 32* 16*
2
1* 5*
2
10*
2
15* 7* 19*
2
Inserindo 9*
4* 12* 20*
3
32* 16*
3
2
Diretrio
000
001
010
011
100
101
100
111
3
Global
21* 13*
Exemplo Insero
110
2
Diretorio
4* 12* 32* 16*
2
1* 9*
3
10*
2
15* 7* 19*
2
Inserindo 9*
4* 12* 20*
3
32* 16*
3
2
Diretorio
000
001
010
011
100
101
100
111
3
Global
5* 21* 13*
3
Regra Geral para Insero de k*
Se Nvel global = d
Calcula h(k);
Considera a entrada m do diretrio, onde
m = nmero correspondente aos d ltimos dgitos da representao
binria de h(k);
Dirige-se para o bucket indicado;
Se o bucket estiver cheio e nvel local = d
Divide o bucket e duplica o diretrio de buckets;
Se o bucket estiver cheio e nvel local = d-1
Divide o bucket, mas no duplica diretrio.
Hash - Possveis Problemas
Distribuio tendenciosa dos valores h(k): muitos em um nico
bucket.
Este um problema que pode ser resolvido no momento da
criao do ndice: basta ajustar a funo h de modo a ter uma
distribuio uniforme.
Coliso: quando existem muitas entradas <k,*> com mesmo h(k),
que no cabem em uma pgina
Este um problema que s aparece medida que o arquivo
cresce.
Neste caso, pginas de overflow so utilizadas.
Hash - Vantagens e Limitaes
Hash excelente para seleo por igualdade na chave.
No suporta seleo range (>, <, <=, >= )
B-Trees suportam seleo range e so quase to boas quanto Hash para
igualdade.
Tcnica de indexao Hash muito til na implementao do operador
Juno, que inclui diversas selees por igualdade. Muitos SGBDs s
implementam ndices estruturados por B-Trees.
Diferena de custo entre B-Tree e Hash significativa neste
caso.
Referncias Bibliogrficas
Sistemas de Banco de Dados. (Cap. 11) Abraham Silberchatz, Henry
F. Korth e S. Sudarshan. 3 Edio. Makron Books, 1999.
Sistemas de Banco de Dados. (Cap. 14) Ramez Elsmari, 4 Edio.
Shamkant B. Navathe. Pearson Addison Wesley, 2005.
Database Management Systems. (Cap. 8-10) R. Ramakrishnan e J.
Gehrke. McGraw-Hill, 2 Edio, 2000.

Vous aimerez peut-être aussi