Organização de Arquivos
e Indexação
Estruturas de Arquivos
Registros
Forma de organização dos dados
Coleção de campos ou itens relacionados
Tipo de Registro
Coleção de nomes de campos e seus respectivos
tipos de dados
struct Empregado {
char nome[30];
char matricula[6];
int salario;
}
2
Estruturas de Arquivos
Arquivos
Um arquivo é uma seqüência de registros
Quando todos os registros de um arquivo
possuem exatamente o mesmo tamanho em
bytes, o arquivo é dito formado por registros
de tamanho fixo
Se registros diferentes em um arquivo
possuem tamanhos diferentes, o arquivo é
formado por registros de tamanho variável
3
Estruturas de Arquivos
Registros com tamanho variável
Registros de um mesmo tipo de registro
Com um ou mais campos de tamanho variável
Com um ou mais campos multivalorados
Com um ou mais campos opcionais
Registros de diferentes tipos de registro
Arquivos mistos
Exemplos
Registros de alunos com registros de notas
Registros de clientes com registros de pedidos
4
Estruturas de Arquivos
Figura 13.5
Três formatos de armazenamento de registro. (a) Registro de
tamanho fixo com seis campos e tamanho de 71 bytes. (b) Um
registro com dois campos de tamanho variável e três campos de
tamanho fixo. (c) Um registro de tamanho variável com três tipos de
caracteres separadores.
5
Organização de Registros
Divisão de registros em blocos
Bloco
Unidade de transferência de dados entre o disco e
a memória
Geralmente, um bloco possui diversos registros
Fator de blocagem (de divisão em blocos)
B é o tamanho do bloco em bytes
R é o tamanho do registro em bytes
bfr B R registros
6
Organização de Registros
Divisão de registros em blocos
Espaço não utilizado
B (bfr R) bytes
Organização Não-Spanned
Registros de tamanho fixo limitados a apenas um
bloco, onde B >R
Organização Spanned
Registros podem se fragmentar por mais de um bloco
(unidos por ponteiros)
Usada sempre que o registro > bloco
7
Organização de Registros
Figura 13.6
Tipos de organização de registro. (a) Nâo-spanned. (b) Spanned.
8
Alocação de Blocos
Alocação Consecutiva
Alocação Encadeada
Blocos são alocados consecutivamente no
disco
Cada bloco de arquivo contém um ponteiro
para o próximo bloco de arquivo
Facilita expansão, mas torna lenta a leitura do
arquivo inteiro
Clusters
Grupos encadeados de blocos consecutivos
9
Estruturas de Armazenamento
Arquivos de Registros Desordenados
Tipo de organização mais simples e básica
Registros estão posicionados segundo a ordem
pela qual foram inseridos
Novos registros são acrescentados ao final do
arquivo (muito eficiente)
Pesquisa de um registro é seqüencial
(ineficiente)
Chamado arquivo pilha (heap file)
Arquivos seqüenciais
10
Estruturas de Armazenamento
Arquivos de Registros Ordenados
Registros são ordenados fisicamente a partir
dos valores de um campo (campo de
classificação) ou da chave (chave de
classificação)
Novos registros são acrescentados na posição
correta (inclusão é dispendiosa)
Pesquisa pelo campo de classificação é binária
Chamado arquivo ordenado (sorted file)
Arquivos seqüenciais
11
Estruturas de Armazenamento
Hashing
Acesso muito rápido aos registros sob uma
condição de igualdade em um campo (campo
de hash) ou na chave (chave de hash)
Usa função hash que é aplicada no campo de
hash de um registro, gerando o endereço do
bucket (bloco de disco ou cluster de blocos
consecutivos) onde o arquivo está armazenado
A busca dentro do bloco é feita na memória
principal
Chamado arquivo hash (hash file)
12
Hashing
Interno
13
Estruturas de Armazenamento
Hashing Externo
14
15
Índices
Um índice é uma estrutura de acesso
auxiliar usado para aumentar a velocidade
da recuperação de registros na resposta a
certas condições de busca
Independente da estrutura de armazenamento
(não ordenada, ordenada,hashed)
Índice fornecem caminhos de acesso
secundários ou alternativos aos registros
a partir de campos de indexação
previamente definidos
16
Índices
Como encontrar um livro em uma
biblioteca pelo título?
Sem catálogo de títulos
Procurar em todas as estantes
Com catálogo de títulos
Consultar o catálogo de títulos
Fichas em ordem alfabética
Localizar a estante onde se encontra o livro
Pesquisar livro nas prateleiras
17
Índices
Como recuperar os clientes de nome ‘Eduardo’?
Sem índice
Busca seqüencial em todas as linhas da tabela
Com índice no campo ‘nome’
Procurar o valor desejado no índice
Obter um endereço do registro correspondente no arquivo
físico
Valores ordenados no índice, viabilizam busca eficiente
Ponteiro para o bloco de disco que contém o dado desejado
Recuperar o registro
Ler o bloco do disco e recuperar o registro dentro do bloco
18
Tipos de Índices
Índices com chave de busca única
Índice
Índice
Índice
Índice
Índice
primário
clustering
secundário
multinível
multinível dinâmico: B-Trees e B+-Trees
Índices com múltiplas chaves de busca
Índice ordenado em múltiplos atributos
Hashing particionado e grid files
Índices espaciais
19
Tipos de Índices
Índice primário
Especificado sobre a chave de classificação
de um arquivo ordenado de registros
Índice clustering
Especificado sobre o campo de classificação
de um arquivo ordenado de registros
Valores distintos para o campo de classificação
Valores repetidos para o campo de classificação
Índice secundário
Especificado sobre outros campos que não
são os campos ou chave de classificação
20
Tipos de Índices
Densos
Possuem uma entrada no índice para cada
valor do campo de classificação e, portanto,
uma entrada para cada registro do arquivo de
dados
Esparsos (Não-densos)
Possuem entradas no índice para apenas
alguns dos valores do campo de classificação
Os demais são percorridos sequencialmente no
bloco a partir do maior valor que seja menor
ou igual ao campo de classificação
21
Índice primário
Um índice primário é um arquivo ordenado cujos
registros são de tamanho fixo e contêm dois
campos
Existe uma entrada no índice para cada bloco no
disco
Valor da chave de classificação (ordenação)
Apontador para um bloco de disco (endereço do bloco)
Cada entrada contém a chave do primeiro registro
contido no bloco (âncora do bloco)
Índices primários são inerentemente esparsos
22
23
Índice primário
Inclusões e Exclusões
Grande problema para índices primários, pois
precisam manter a ordenação
Alterações causarão a mudança das âncoras
Possível solução
Usar blocos de overflow para evitar o rearranjo na
inclusão
Marcar registros excluídos
Reorganização ocorrerá na reconstrução do índice
24
Índice clustering
Tipo diferente de índice para acelerar a
recuperação quando os registros de um arquivo
são ordenados fisicamente com base em algum
valor que não é chave (não possui valor distinto
para cada registro)
Esse valor é denominado campo de clustering
Precisa existir uma entrada no índice para cada
valor distinto do campo de classificação
O apontador indica o primeiro bloco no qual registros
contendo aquele valor poderão ser encontrados
Índices clustering também são esparsos
25
Figura 14.2 Um índice clustering para o
campo NUM_DEPARTAMENTO, que não é
campo-chave de classificação, de um arquivo
EMPREGADO.
26
Figura 14.3 Um índice clustering com um grupo
(cluster) separado de blocos para cada grupo de
registros que compartilhem o mesmo valor
de campo clustering.
27
Índice Secundário
Um índice secundário provê uma forma
secundária de acesso a um arquivo para o qual
um índice primário já exista
Tanto pode ser referente a uma chave candidata,
quanto a um atributo cujo valor possa se repetir
O índice é um arquivo ordenado com dois
campos
Valor da chave de classificação (ordenação)
Apontador para um bloco de disco (endereço do bloco)
Podem existir diversos índices secundários para o
mesmo arquivo com vários campos de indexação
28
Índice Secundário
Índice para chave secundária (candidata)
Não é possível usar âncoras de bloco, pois o
arquivo não está fisicamente ordenado pela
chave de classificação
Uma entrada no índice para cada registro do
arquivo (índice denso) que pode apontar para o
registro ou bloco
Consome mais espaço em disco e mais tempo de
acesso por causa do maior número de entradas
Caso não existisse o índice secundário, seria
necessário percorrer todo o arquivo
29
Figura 14.4 Um índice secundário denso (com ponteiros de bloco)
em um campo não é chave de classificação de um arquivo.
30
Índice Secundário
Índice para campo que se repete (não-chave)
Opção 1: incluir várias entradas no índice (duplicadas),
uma para cada registro (índice denso)
Opção 2: manter registros de tamanho variável no
índice com um campo multivalorado para armazenar
os ponteiros para cada bloco onde há um registro para
o campo de indexação
Opção 3: manter uma entrada para cada valor distinto,
mas apontar para um bloco contendo ponteiros para
as várias ocorrências do valor no arquivo
A opção 3 é a mais usada!
31
Figura 14.5 Um índice secundário (com ponteiros
de registro), em um campo que não é campo-chave,
implementado em um nível adicional, indireto, de
forma que as entradas de índice sejam de tamanho
fixo e possuam valores de campo únicos.
32
Atualização de Índices
Independente do tipo de índice utilizado,
ele deve ser atualizado sempre que um
registro for inserido ou removido do
arquivo de dados
Inclusão
Exclusão
Localizar o registro
Incluir o registro,
caso não exista
Remover o registro,
caso exista
Atualizar o índice
33
Quando criar índices?
Quando criar um índice
Para acelerar a recuperação dos dados
Para impor exclusividade aos registros
Restrição de chave primária, cria um índice único
Quando não criar um índice
Consome espaço em disco
Acarreta sobrecarga em operações de
atualização (INSERT, UPDATE, DELETE)
34
Quais colunas indexar?
Conhecendo os dados
Determinando a seletividade
Determinando a densidade
Determinando a distribuição de dados
Diretrizes sobre indexação
35
Quais colunas indexar?
Conhecendo os dados
A estrutura física e lógica
As características dos dados
Como os dados são usados
Os tipos de consulta feitos
A freqüência das consultas normalmente feitas
36
Quais colunas indexar?
Determinando a seletividade
Seletividade é o percentual de linhas de uma
tabela retornadas por uma query
Alta seletividade (Bom para usar índices!)
Alta restrição e baixo percentual
Alta seletividade
member_no last_name first_name
1
Randall
Joshua
2
Flood
Kathie
= 10%
SELECT *
FROM member
WHERE member_no > 9001
.
.
.
10000
1000
Número de registros que atendem aos critérios
=
10000
Número total de registros em uma tabela
Anderson
Bill
37
Quais colunas indexar?
Determinando a densidade
Densidade é o percentual de linhas
duplicadas em um índice
Se os dados ou a consulta tem baixa
seletividade, geralmente a densidade é alta
Alta densidade
Um índice com um grande número de duplicatas
Um índice único tem baixa densidade
Prefira criar índices com baixa densidade
38
Quais colunas indexar?
Determinando a densidade
last_name
first_name
Randall
Joshua
.
.
.
Randall
Randall
Cynthia
Tristan
Alta densidade
SELECT *
FROM member
WHERE last_name =
‘Randall’
.
.
Baixa densidade
.
SELECT *
FROM member
WHERE last_name = ‘Ota’
Ota
.
Lani
.
.
39
Quais colunas indexar?
Determinando a distribuição de dados
Usar índices quando há uma distribuição não
homogênea de valores
Distribuição não-homogênea (standard) de valores
Número de
Nomes
A-E
F-J
K-O
Nome
P-U
V-Z
40
Quais colunas indexar?
Diretrizes sobre indexação
Colunas que devem ser indexadas
Chaves primárias e estrangeiras
Colunas pesquisadas para a localização de faixas
Colunas utilizadas em ORDER BY
Colunas agrupadas durante a agregação
41
Quais colunas indexar?
Diretrizes sobre indexação
Colunas que não devem ser indexadas
As que sejam raramente referenciadas em uma
consulta
As que contenham poucos valores únicos (sexo!)
Baixa seletividade
Alta densidade
As que sejam definidas com os tipos de dados
BLOB (binary large objects)
42
Melhores Práticas
Crie índices em colunas que unem tabelas
Use índices para impor exclusividade
Examine os índices e descarte aqueles que não estão
sendo usados
Evite chaves com muitas colunas
Crie índices que ofereçam suporte aos argumentos de pesquisa
43