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