algoritmos para processamento e otimização de consultas (otimização baseada em custos) cristiano...
TRANSCRIPT
Algoritmos para processamento e otimização de consultas
(Otimização baseada em custos)
Cristiano Galina
Slides adaptados do livro Sistema de Banco de Dados Elmasri & Navathe
4a. Ediçãocapítulo 15
Definição do Plano de Execução• Analisar alternativas de processamento
• Escolher a melhor alternativa
• Diversas medidas podem ser consideradas– tempo CPU, comunicação, acessos a disco
• medida mais relevante (“gargalo”): acessos a disco
– para avaliar o custo de uma alternativa• análise de estimativas sobre os dados
– tamanho das tabelas, existência de índices, seletividade, ...
• custo dos algoritmos de processamento de operações algébricas
Antes...
• Para entendermos a otimização baseada em custos...
... precisamos entender brevemente, por enquanto, as estruturas de indexação
Estruturas de indexação de arquivos
Cristiano T. Galina
Slides adaptados do livro Sistema de Banco de Dados Elmasri & Navathe
4a. Ediçãocapítulo 14
Roteiro• Índices• Tipos de índices ordenados em nível único
– Índices primários– Índices clustering– Índices secundários
Índices• Estruturas de acesso adicionais
– Aumentar a velocidade de recuperação de registros na resposta a certas condições de busca
– Acesso eficiente aos registros a partir de campos de indexação que são usados para construir o índice
• Para encontrar um registro (s) com base em certo critério de seleção– Acessar o índice
• Aponta para um ou mais blocos do arquivo em que os registros requeridos estão localizados
Índices como caminhos de acesso– Índices podem ser caracterizados
como densos ou esparsos• Denso
– Tem uma entrada para cada valor de chave de busca
» Aponta para o primeiro registro
Índice Denso
• Uma seqüência de blocos contendo apenas as chaves dos registros e os ponteiros para os próprios registros.
• Mantém as chaves na mesma ordem classificada encontrada no arquivo de dados.– Busca binária
• Como o tamanho de chaves e ponteiros é menor que de todos dados em si, pode caber todo na memória principal.– Com isto podemos encontrar qualquer registro, dada sua
chave, com poucas operações de E/S
2010
4030
6050
8070
10090
Índice Denso
10203040
50607080
90100110120
Arquivo Seqüencial
Índice Esparso
• Contém apenas um par chave-ponteiro por bloco de dados.
• A chave corresponde ao primeiro registro do bloco.
• Utiliza menos espaço. Porém, o custo para encontrar um registro, dado sua chave, é um pouco maior
2010
4030
6050
8070
10090
Índice Esparso
10305070
90110130150
170190210230
Arquivo Seqüencial
Roteiro• Tipos de índices ordenados em nível único
– Índices primários• em um arquivo ordenado sequencialmente, o índice cuja chave de busca
especifica a ordem sequencial do arquivo.– A chave de busca de um índice primário é geralmente a chave
primária– Ex: índice pra numEmp e arquivo de dados ordenado por numEmp
– Índice clustering• o arquivo de dados é ordenado por um campo não chave
– Ex: índice pra codDepto em Empregado, e arquivo de dados ordenado por codDepto (o codDepto se repete em várias linhas)
– Índice secundário• um índice cuja chave de busca especifica uma ordem diferente da
ordem sequencial do arquivo– Ex: índice pra CPF e arquivo de dados ordenado por codEmp
Tipos de índices ordenados em nível único
1. Índice primário• Em um arquivo ordenado sequencialmente, o índice cuja
chave de busca especifica a ordem sequencial do arquivo– A chave de busca de um índice primário é geralmente a chave
primária
• O arquivo de dados é ordenado pelo campo chave• Inclui uma entrada de índice para cada bloco no arquivo de
dados; a entrada do índice tem o valor do campo chave para o primeiro registro no bloco, o qual é chamado bloco âncora
• Um índice primário é um índice esparso (não denso)– inclui uma entrada para bloco de disco do arquivo de dados e chaves
do arquivo âncora, ao invés de para cada valor de pesquisa
Considerando o exemplo: alguns blocos de um arquivo ordenado (sequencial) de registros de empregado tendo nome como campo chave de classificação...
Índice primário para o campo chave de classificação
…Tipos de índices ordenados em nível único
2. Índices Clustering
– Definido em um arquivo de dados ordenado– O arquivo de dados é ordenado por um campo
não chave (ao contrário do índice primário)– Inclui uma entrada de índice para cada valor
distinto do campo• A entrada do índice aponta para o primeiro bloco de
dados que contém registros com o valor do campo
– Esparso
Um índice clustering para o campo DEPTNUMBER, que não é campo chave de classificação, de um arquivo empregado
Índice clustering com um grupo (cluster) separado de blocos para cada grupo de registros que compartilhem o mesmo valor de campo de clustering
… Tipos de índices ordenados em nível único
3. Índice secundário
– Um índice cuja chave de busca especifica uma ordem diferente da ordem sequencial do arquivo.
– Fornece um meio secundário de acessar um arquivo para o qual algum acesso primário já existe
– O índice secundário pode ser em um campo que é uma chave candidata e tem um valor único em cada registro, ou uma chave não única com valores duplicados
– Inclui uma entrada para cada registro no arquivo de dados• Índice denso
Um índice secundário denso (com ponteiros de bloco) em um campo que não é chave de classificação de um arquivo
codEmp CPF
CPF
Roteiro
1. Algoritmos para as operações select e join2. Algoritmos para as operações project e de
conjunto
Roteiro
1. Algoritmos para as operações select e join2. Algoritmos para as operações project e de
conjunto
1. Algoritmos para as operações de select e join
Implementação da operação select:• Exemplo:(OP1): SSN='123456789' (EMPLOYEE)
(OP2): DNUMBER>5 (DEPARTMENT)
(OP3): DNO=5 (EMPLOYEE)
(OP4): DNO=5 AND SALARY>30000 AND SEX=‘F’ (EMPLOYEE)
(OP5): ESSN=123456789 AND PNO=10 (WORKS_ON)
1. Algoritmos para as operações de select e join (2)
Métodos de busca para seleção simples:• S1. Busca linear (força bruta): recupera cada registro
do arquivo e testa se seus valores de atributos satisfazem a condição de seleção– Equivalente a Busca Sequencial
• S2. Busca binária: se a condição de seleção envolver uma comparação de igualdade em um atributo chave para o qual o arquivo está ordenado– Mais eficiente que busca linear– Ex: OP1 SSN='123456789' (EMPLOYEE)
• S3. Utilização de um índice primário: se a condição de seleção envolver uma comparação de igualdade em um atributo chave com um índice primário– Ex: SSN='123456789' na operação OP1
1. Algoritmos para as operações de select e join (3)
• S4. Utilização de um índice primário para recuperar múltiplos registros: Se a condição de comparação for >, ≥, <, or ≤ em um campo chave com índice primário– Ex: DNUMBER>5 na operação OP2
• Recupere todos os registros seguintes no arquivo ordenado
• S5. Utilização de um índice cluster para recuperar múltiplos registros: Se a condição de seleção envolver uma comparação de igualdade em um atributo não chave com um índice clustering– Ex: DNO=5 na OP3
1. Algoritmos para as operações de select e join (4)
• S6. Utilização de um índice secundário em uma comparação de igualdade: recuperar um único registro se o campo de indexação for uma chave ou recuperar múltiplos registros se o campo de indexação não for chave– Também pode ser usado para comparações
envolvendo >, >=, < ou <=
1. Algoritmos para as operações de select e join (5)
Métodos de busca para seleção complexa (conjuntiva): Ex: OP4
DNO=5 AND SALARY>30000 AND SEX=‘F’ (EMPLOYEE)
• S7. Seleção conjuntiva utilizando um índice individual: – se um atributo envolvido possui um caminho de
acesso que permita o uso de um dos métodos S2 a S6• use aquela condição para recuperar os registros • depois verifique se cada registro recuperado satisfaz as
condições simples restantes da conjunção
1. Algoritmos para as operações de select e join (5)
Métodos de busca para seleção complexa (conjuntiva): Ex: OP4
DNO=5 AND SALARY>30000 AND SEX=‘F’ (EMPLOYEE)
• S8. Seleção conjuntiva utilizando um índice composto– se dois ou mais atributos estiverem envolvidos em
condições de igualdade na condição conjuntiva e houver um índice composto para a combinação dos campos então usa-se o índice diretamente
1. Algoritmos para as operações de select e join (6)
• S9. Seleção conjuntiva por meio da interseção de registros: – se índices secundários (ou outros caminhos de acesso)
estiverem disponíveis para mais de um dos campos envolvidos nas condições simples de uma condição conjuntiva
• e se os índices incluirem ponteiros de registros (em vez de ponteiros de blocos),
– cada índice poderá ser usado para recuperar o conjunto de ponteiros de registros que satisfaça a condição individual
– a interseção destes conjuntos de ponteiros de registros resulta nos ponteiros de registros que satisfazem a condição conjuntiva e que são usados depois para recuperar diretamente aqueles registros
– se apenas algumas das condições possuir índices secundários, cada registro recuperado será posteriormente testado para determinar se ele satisfaz as condições restantes.
1. Algoritmos para as operações de select e join (7)
• Sempre que uma condição individual especifica a seleção, podemos verificar se existe um caminho de acesso no atributo envolvido naquela condição. – Se houver: o método correspondente àquele caminho será utilizado– Caso contrário: a abordagem da força bruta (S1) será utilizada
• Em condições de seleção conjuntivas, sempre que mais de um dos atributos envolvidos nas condições tiver um caminho de acesso– O otimizador deve escolher o caminho que recupera o
menor número de registros de forma mais eficiente• Por meio de estimativas de custos
– Veremos mais tarde
1. Algoritmos para as operações de select e join (8)
Implementação do operador JOIN: tempo!• Join (EQUIJOIN, NATURAL JOIN)
• Examples para os algoritmos a seguir:(OP6): EMPLOYEE DNO=DNUMBER DEPARTMENT
(OP7): DEPARTMENT MGRSSN=SSN EMPLOYEE
1. Algoritmos para as operações de select e join (8)
• J1. Junção de laço aninhado (nested loop) -força bruta– Para cada registro t em R (laço externo)
• Recupere cada registro s em S• Teste se os dois registros satisfazem a condição de junção
• J2. Junção de laço único (single loop) – Usando uma estrutura de acesso para recuperar os
registros correspondentes à junção• Se existir um índice para um dos dois atributos de junção (por ex,
B de S)– recupere cada registro t em R (um por vez)
» Use a estrutura de acesso para recuperar os registros em S que satisfaçam a condição de junção
1. Algoritmos para as operações de select e join (9)
• J3. Junção ordenação-fusão (sort-merge)– Se os registros de R e S estiverem ordenados
pelos valores dos atributos da junção• Forma mais eficiente!
– Varrer ambos arquivos simultaneamente» Fazendo a correspondência dos registros que possuem
os mesmos valores para os atributos de junção
Roteiro
1. Algoritmos para as operações select e join2. Algoritmos para as operações project e de
conjunto
2. Algoritmos para as operações PROJECT e de conjunto
<attribute list>(R) Se <lista de atributos> contém a chave de R
Extraia os atributos em <lista de atributos> para todas tuplas Caso contrário
Tuplas duplicadas devem ser removidas Métodos para remover duplicatas
Ordenação do resultado Eliminar tuplas idênticas consecutivas
Hashing Compara pelo hash: (bucket: se mesmo hash, não insere)
2. Algoritmos para as operações PROJECT e de conjunto (2)
União, interseção, diferença e produto cartesiano Produto cartesiano
Cara! Um registro para cada combinação de registros das duas tabelas
Linhas: n*m Atributos: n+m
Evitá-la! Substituir por outras operações equivalentes durante a otimização da
consulta
2. Algoritmos para as operações PROJECT e de conjunto (3)
União, interseção e diferença1. Ordene as relações segundo o mesmo atributo2. Uma única varredura por meio de cada relação é suficiente para produzir o
resultado União
Varredura e fusão de ambos arquivos ordenados simultaneamente Sempre que houver a mesma tupla em ambas relações
Apenas uma é mantida no resultado da fusão Intersecção
Manter no resultado da fusão apenas as tuplas que aparecem em ambas as relações
OBS: Algoritmos para ordenação externa
• Ordenação– Algoritmo básico
• Ex. SQL: order by– Resultado da consulta deve ser ordenado
– Também é componente chave nos algoritmos de junção e outras operações (união, interseção), eliminação de duplicatas (project-distinct)
• Ordenação externa– Para arquivos de registros grandes
• Não cabem inteiramente na memória
OBS: Algoritmos para ordenação externa (2)
• Típico algoritmo de ordenação externa– Estratégia sort-merge (ordenação-fusão)
• Ordena pequenos sub-arquivos (runs – resultados parciais) do arquivo principal
• Realiza a fusão dos runs ordenados– Criando subarquivos maiores ordenados, que por sua vez
são fundidos
• Mais tarde, veremos como desenvolver fórmulas para estimar o custo de acesso nestes métodos de busca em função do número de acessos a blocos e do tempo de acesso