indices: estruturas auxiliares para otimizar acesso aos dados aula 7 profa. sandra de amo gbc053 –...
TRANSCRIPT
Indices: Estruturas Auxiliares para Otimizar
Acesso aos Dados
AULA 7 Profa. Sandra de Amo
GBC053 – BCC
BCC-2013-1
Organização dos Dados nos Arquivos
Arquivos Heap (Sequencial) Arquivos Ordenados por uma Chave (de
ordenação) Chave = conjunto de atributos
Arquivos Agrupados por uma Chave (de agrupamento) Chave = conjunto de atributos Função de agrupamento (= função hash)
Métodos de Acesso: utilizam estruturas auxiliares para acelerar a busca Estruturas auxiliares = arquivos de indice
O que é um índice ?
Arquivo de Dados
João da Cruz, ....
Select *From Emp EWhere E.Nome = ‘João da Cruz’
• Arquivo Heap: custo de um scan• Arquivo Ordenado por Nome: busca binária• Arquivo Hash (por nome): scan no subarquivo Skonde k = Hash(João da Cruz)
Em qualquer das organizações de arquivos,há a possibilidade de se ler muitas páginasde dados até encontrar o registro procurado.
O que é um índice ? Select *From Emp EWhere E.Nome = ‘João da Cruz’
E se conhecessemos o rid = (Npag,Nsot) do registro procurado ?
Carlos, (2,2)
João..., (5,4)
Arquivo de Indice
Pagina 5
slot 4
Um indice é um ARQUIVO AUXILIAR ASSOCIADO AO ARQUIVO ORIGINAL
BCC-2013-1
Dados, indices, índices, índices, ...
DADOS
Consulta: Me dê o livro Database Systems – Ramakrishnan/Gehrke
Arquivo de Indice
BCC-2013-1
04/11/23 6
Arquivos de Indice
ridA D E F
chave
a d e fa d e fa d e f
(12,1)(18,5)(22,4)
rid A B C D E F G
a b1 c1 d e f g1(12,1)
a b2 c2 d e f g2(18,5)
a b3 c3 d e f g4(22,4)
Arquivo de Indice
Arquivo de DadosEndereços obtidos no diretório de arquivos e no diretório de slots das páginas
BCC-2013-1
04/11/23 7
Dinâmica geral dos Arquivos de Indice Busca no arquivo de indice:
Páginas deste arquivo são organizadas de modo a permitir a localização rápida das entradas com uma dada chave.
Uma vez encontradas rapidamente estas entradas no arquivo de índice, já temos os endereços dos registros de dados associados (seu rid = (N,X)).
O local exato no disco onde se encontra a página de número N é encontrado através do diretório de arquivos do disco: fornece o endereço da header page do arquivo.
O local exato na página N onde se encontra o slot X do registro procurado é obtido através do diretório de slots da página N
BCC-2013-1
Como encontrar um registro num Arquivo A conhecendo o rid do registro?
Rid = (12, 3) Vai no diretório de arquivos no disco e procura o
registro correspondente ao arquivo A, para obter o ponteiro para o primeiro bloco do arquivo.
Calcula o endereço do 12º bloco e posiciona a cabeça de leitura neste endereço.
Transfere o 12º bloco para o buffer pool Processador de consultas consulta o diretório de slot
da página 12 e procura o endereço do registro contido no slot 3, bem como o tamanho (L) do registro contido neste slot.
Vai para este endereço de memória e lê L bytes.
04/11/23 9
Arquivos de Indice Otimiza a procura de registros em arquivos, pois o arquivo de indice
contém o rid dos registros.
Através do rid encontra-se facilmente os registros de dados completos nos arquivos.
No arquivo de índice, cada registro é da forma (valores_chave,rid) Chave = conjunto de atributos
Se chave contém chave candidata do arquivo, então chave determina unicamente o rid
Caso contrário, uma mesma chave pode acessar diversos rids.
Exemplo : se chave = {Salário}
Como as informações são obtidas rapidamente no arquivo de indice ?
Métodos de Acesso
Técnicas de organização das páginas dos arquivos de índices
B+TreesTabelas Hash
BCC-2013-1
04/11/23 11
Catálogo do Sistema
Metadados
Descrição dos dados e índices
Informações sobre visões
Catálogo = conjunto de relações (arquivos) contendo todas as informações sobre os arquivos sendo utilizados pelo sistema.
04/11/23 12
Catálogo do Sistema Arquivos « Relações », « Atributos », « Restrições », ...
Nome da relação, nome do arquivo , estrutura do arquivo Nomes e tipos dos atributos Nome do índice Restrições de Integridade (chave primária, estrangeira) Guardam inclusive registros correspondentes às relações
« Relações », « Indices », « Atributos », « Visões », ...
Arquivo « Indices »
Nome e estrutura de cada índice Chave de cada índice
Arquivo « Visões » Nome e código
Resumo: Arquivo de Indice
O que é ? estrutura auxiliar projetada para agilizar
operações de busca, inserção e deleção
Em que consiste ? Uma coleção de registros Uma chave de busca k Cada entrada contém informação suficiente para
localizar registros de dados contendo a chave de busca k.
Vantagens
Tamanho: normalmente é bem menor do que o arquivo de dados
Organização optimizada: pode ser sequencial, ordenado ou hashed
Método de Acesso rápido: pode ser estruturado usando uma b-tree ou hash (estático, dinâmico)
O que armazenar em um índice ?
Registro de Dados =
Chave Rid + Registro do indice = Chave do índice !!
Indice: como são os registros ?
Alternativa 1 Entrada = registro inteiro de dados Neste caso, a única vantagem do índice é a forma como é
organizado: ordenado, hash, com método de acesso ou não Alternativa 2
Entrada = (k,rid), k = chave Chave = conjunto de atributos
Alternativa 3 Entrada = (k, lista de rids) Vantagem: ocupa menos espaço. Uma chave acessa
diversos registros no arquivo de dados Desvantagem: registro de tamanho variável
BCC-2013-1
Como organizar as entradas do índice ?
Entrada = registro
Entradas podem ser ordenadas Entradas podem ser organizadas por Hash
BCC-2013-1
Exemplo de Indice ordenado
Paulo, 44, 2000
Pedro, 35, 2000
Carlos, 44, 2000
José, 40, 2500
João, 35, 3000
Ilmério, 40, 3500
Rodrigo, 40, 3500
Maria, 30, 4000
Sara, 35, 4000
Sabrina, 31, 5000
2000
2000
2000
2500
3000
3500
4000
3500
4000
5000
Registros de dadosEntradas : organizadasde forma ordenada
BCC-2013-1
Exemplo de Indice organizado por Hash
Paulo, 44, 2000
Pedro, 35, 2000
Carlos, 44, 2000
José, 40, 2500
João, 35, 3000
Ilmério, 40, 3500
Rodrigo, 40, 3500
Maria, 30, 4000
Sara, 35, 4000
Sabrina, 31, 5000
2000
2000
2000
2500
5000
3000
3500
3500
4000
Registros de dadosEntradas
H
4000
H(sal) = 01
H(sal) = 11
H(sal) = 00
BCC-2013-1
Tipos de indices
Relação entre a maneira como são organizados os dados no índice e no arquivo de dados
Agrupado – não agrupado Densos – esparsos Primários – secundários Simples - compostos
BCC-2013-1
Indices Agrupados (ordenados)
Agrupados : a ordem dos registros é compatível com a ordem das entradas no arquivo de índice.
Se entrada é do tipo (chave, rid) então os registros de dados são ordenados por chave.
Somente um índice agrupado do tipo (chave,rid)
Indices Agrupados (hash)
Agrupados : a função hash utilizada na distribuição dos registros de dados é a mesma função utilizada para distribuir as entradas no arquivo de índice.
Se a entrada é do tipo (chave, rid) e arquivo de índice é organizado por hash, utilizando a função hash h(chave), eentão os registros de dados são organizados por hash através dos atributos de chave.
Exemplo de Indice Agrupado (ordenado)
Paulo, 44, 2000
Pedro, 35, 2000
Carlos, 44, 2000
José, 40, 2500
João, 35, 3000
Ilmério, 40, 3500
Rodrigo, 40, 3500
Maria, 30, 4000
Sara, 35, 4000
Sabrina, 31, 5000
2000
2000
2000
2500
3000
3500
4000
3500
4000
5000
Registros de dados(ordenador por Sal)
Entradas (ordenadas por Sal)
= rid
Exemplo de Indice Agrupado (ordenado)
Paulo, 44, 1000
Pedro, 35, 1000
Carlos, 44, 1000
José, 40, 1500
João, 35, 3000
Ilmério, 40, 3500
Rodrigo, 40, 3500
Maria, 30, 4000
Sara, 35, 4000
Sabrina, 31, 5000
1000
1000
1000
1500
3000
3500
4000
3500
4000
5000
Registros de dados(ordenados por Idade)
Entradas (ordenadas por Sal)
= rid
Exemplo de Indice agrupado
Paulo, 44, 1000
Pedro, 35, 1000
Carlos, 44, 1000
José, 40, 1500
João, 35, 3000
Ilmério, 40, 3500
Rodrigo, 40, 3500
Maria, 30, 4000
Sara, 35, 4000
Sabrina, 31, 5000
1000
1000
1000
1500
5000
3000
3500
3500
4000
Registros de dados (organizadospela função hash h(x) = (x/1000) mod 4,x: valor do atributo Salário
H
4000
H(sal) = 01
H(sal) = 11
H(sal) = 00
Entradas (organizadaspela função hash h(x) = (x/1000) mod 4,x: valor do atributo Salário
Bucket 2 Bucket 2
Bucket 3
Bucket 1
Bucket 3
Bucket 1
= rid
Exemplo de Indice não agrupado
Paulo, 44, 1000
Pedro, 35, 1000
Carlos, 44, 1000
José, 40, 1500
João, 35, 3000
Ilmério, 40, 3500
Rodrigo, 40, 3500
Maria, 30, 4000
Sara, 35, 4000
Sabrina, 31, 5000
1000
1000
1000
1500
5000
3000
3500
3500
4000
Registros de dados (ordenadospor Salário)
Entradas (organizadaspela função hash h(x) = (x/1000) mod 4,x: valor do atributo Salário
H
4000
H(sal) = 01
H(sal) = 11
H(sal) = 00
= rid
Vantagens e desvantagens Desvantagem (no caso de ordenado) : grande overhead para mover registros a
fim de preservar a ordem depois de inserções e deleções.
Desvantagem (no caso de hash) : se o hash é estático, se há muitas inserções no banco de dados, tanto a estrutura hash do indice quanto a dos dados deverá ser refeita periodicamente. Se o hash é dinâmico, há overhead para manter a estrutura hash tanto no arquivo de indice quanto no de dados.
Vantagem – no caso de agrupado ordenado Seleções do tipo ‘= a’ ou ‘< a’ ... são altamente otimizadas caso os registros
sejam ordenados pela chave do indice, e este seja ordenado pela chave. Rids das entradas apontam para registros contíguos, menos páginas são
manipuladas.
Vantagem – no caso de agrupado hash Seleções do tipo ‘= a‘ são altamente otimizadas
Rids das entradas satisfazendo a condição da busca apontam para registros que estão no mesmo bucket, logo menos páginas são manipuladas.
Indices Densos
Densos : se para cada valor v da chave de busca existe uma entrada (v,rid).
Não-denso = esparso
Exemplo de Indices denso e não denso
André, 44, 2000
Carlos, 44, 2000
José, 40, 2500
João, 35, 3000
Ilmério, 40, 3500
Rodrigo, 40, 3500
Maria, 30, 4000
Sara, 35, 4000
Sabrina, 31, 5000
30
31
35
35
35
40
40
40
44
Registros de dados(ordenados por Nome)
Indice Esparso e Agrupado 44
Pedro, 35, 2000
Indice Denso (em Idade) e não-agrupado
André
José
Rodrigo
= rid
Exemplo de Indice denso onde a chave não é chave da relação
André, 44, 2000
Carlos, 44, 2000
José, 40, 2500
João, 40, 3000
Ilmério, 40, 3500
Rodrigo, 45, 3500
Maria, 40, 4000
Sara, 35, 4000
Sabrina, 31, 5000
Registros de dados (ordenados por Idade)
Pedro, 40, 2000
Pagina 1
Pagina 2
Pagina 3
31
40
44
(1,1)
(2,1)
(3,1)
Select * From EMP EWhere E.Sal = 40
Pagina 2 é carregada,Página 1 é carregadaPágina 3 não é carregada, pois Através do indice sabe-se que o 1o registro de Pag. 3 tem Idade = 44
Exemplo de Indice denso onde a chave não é chave da relação
André, 44, 2000
Carlos, 44, 2000
José, 40, 2500
João, 40, 3000
Ilmério, 40, 3500
Rodrigo, 45, 3500
Maria, 40, 4000
Sara, 35, 4000
Sabrina, 31, 5000
Pedro, 40, 2000
Pagina 1
Pagina 2
Pagina 5
31
40
44
(1,1)
(2,1)
(5,1)
Select * From EMP EWhere E.Sal = 40
Pagina 2, 3, 4 são carregadas,Página 1 é carregadaPáginas 5 não é carregada, pois Através do indice sabe-se que o 1o registro de Pag. 5 tem Idade = 44
Pagina 3Pagina 4
***
Vantagens e desvantagens
Esparso tem que ser agrupado Vantagens de esparso : arquivo de indice
ocupa menor espaço. Desvantagem de esparso : técnicas de
otimização de busca são apropriadas para índices densos.
Indices Primários e Secundários
Primários : Chave do índice inclue a chave primária da relação. Não há entradas duplicadas (com mesmo
valor da chave)
Secundários : Não contém chave primária. Pode conter chave candidata Pode conter duplicatas ou não
Indices com chaves compostas
bob
cal
joe
sue
42
31
42
33
80
10
20
75
Indice em Idade
31
33
42
42
10
20
75
80
Indice em Sal
31,80
33,75
42,10
42,20
10,42
20,42
75,3380,31
Indice em (Idade,Sal)
Indice em (Sal,Idade)
Consultas
Consultas com igualdade Chave composta (Idade, Sal)
Idade = 10, Sal = 80 Arquivos Hashed só são convenientes para consultas com
igualdade
Consultas Range Chave composta (Idade, Sal)
Idade = 10 Idade < 10, Sal > 80
Arquivos Ordenados são convenientes para consultas com igualdade
Indices em SQL
CREATE INDEX IndAgeGrau ON EstudantesWith Structure = BTREE,
Key = (Idade, Média)