Prof. Daniela Barreiro Claro
SQL, SQL3 e OQL são linguagens declarativas O SGBD deve processar e otimizar estas consultas antes delas serem efetivamente executadas Uma consulta possui muitas estratégias de execução possíveis O processo de escolha destas estratégias é chamado de OTIMIZAÇÃO. Prof. Daniela Barreiro Claro 2
Um SGBD relacional mantém informações sobre cada tabela e índice. Estas informações são armazenadas nos CATALOGOS DO SISTEMA Informações do Catálogo Cardinalidade Numero de tuplas de cada tabela R Tamanho Numero de paginas de cada tabela R Cardinalidade do Indice Numero de valores distintos para cada índice I Tamanho do Indice Numero de paginas para cada índice I Altura do Indice Numero de níveis não-folhas para cada índice I Faixa de Indice O mínimo valor de chave presente e o máximo valor de chave presente para cada índice I Prof. Daniela Barreiro Claro 3
Caminhos de Acesso É uma forma de recuperar tuplas de uma tabela através da: Varredura de arquivos Um índice mais uma condição de seleção Considerando uma condição attr op valor Um índice satisfaz uma condição de seleção se puder ser utilizado para recuperar apenas as tuplas que satisfaçam as condiçoes Um índice hash satisfaz uma seleção se houver um termo attr = valor Um índice de árvore satisfaz uma seleção se houver um termo attr op valor para cada atributo em um prefixo da chave de pesquisa do índice <a> e <a,b> são prefixos da chave <a,b,c>, mas <a,c> e <b,c> não são. Prof. Daniela Barreiro Claro 4
Considerando: Marinheiros (id_marin:integer, nome_marin:string, avaliacao:integer, idade:real) Reservas (id_marin:integer, id_barco:integer, dia:date, nome_resp:string) Quais os caminhos de acesso possíveis dado o índice <nome_resp, id_barco, id_marin> Caso 1: nome_resp= Joe id_barco = 5 id_marin=3 Caso 2: nome_resp= Joe id_barco = 5 dia=28/12/2012 Caso 3: id_barco = 5 dia=28/12/2012 Se usar um índice hash? Se usar um índice de árvore? Quais os caminhos de acesso que não são possíveis? Prof. Daniela Barreiro Claro 5
Usando um Indice Hash Somente as tuplas que satisfaçam a condição igual nome_resp= Joe id_barco = 5 id_marin=3 Se a condição de seleção for nome_resp= Joe id_barco = 5 ou alguma outra sobre data Este índice não satisfaz ou seja, ele não pode ser usado para recuperar as tuplas que satisfaçam estas condições Usando um Indice árvore B+ Se fosse B+, o índice satisfaria tanto a condição nome_resp= Joe id_barco = 5 id_marin=3 quanto a condição nome_resp= Joe id_barco = 5 Porém não satisfaria id_barco = 5 id_marin=3 As tuplas estão ordenadas por nome_resp Prof. Daniela Barreiro Claro 6
Seletividade de um caminho de acesso É o numero de paginas recuperadas (páginas de índices mais páginas de dados) se usarmos este caminho de acesso para recuperar todas as tuplas desejadas Se uma tabela contiver um índice que satisfaça uma seleçao há dois caminhos de acesso Utilizando indice Varredura do arquivo de dados Caminho de acesso mais seletivo É o que recupera o menor número de páginas Minimiza o custo da recuperação de dados Prof. Daniela Barreiro Claro 7
Select cpf from candidato where cpf= 859 ; Analisador Léxico, cpf= 859 Sintatico ( cpf= 859 ( e (Candidato)) Validação cpf Otimizador cpf= 859 ; usar indice 1 Daniela Claro, 859, Salvador Pedro Antonio, 123, Rio de J Dados candidato Saida da Consulta 859 Mecanismo de Execução candidato;indice1 cpf disciplina;indice2-codigo Estatisticas 8 Prof. Daniela Barreiro Claro
O sistema tenta encontrar uma expressão que seja equivalente à expressão dada, porém cuja execução seja mais eficiente. Para isso a consulta é separada em blocos Estes blocos podem ser traduzidos em operadores algébricos e assim otimizados Os operadores algébricos, como SELECT podem ser executados por diversos algoritmos. Estas escolhas dependem do uso ou não de índices, da complexidade do operador, etc Prof. Daniela Barreiro Claro 9 Q
SELEÇÃO Dada uma seleção na forma σ R.atrib op valor (R) Sem índice em R.atrib Varre R Com índice Pode-se usar o índice desde que satisfaçam a condição de seleção Regra geral Se mais que 5% das tuplas forem recuperadas no resultado é melhor varrer toda a R Prof. Daniela Barreiro Claro 10
PROJEÇÃO Dada uma projeção na forma π R.atrib1, R.atrib2 (R) Custo da projeção é garantir que nenhuma duplicata apareça no resultado Se tiver um índice cuja chave de pesquisa contenha todos os campos retidos na projeção Pode-se ordenar as entradas de dados no índice em vez dos próprios registros dos dados A disponibilidade de índices apropriados pode levar a planos menos custosos do que ordenar para eliminar duplicatas Prof. Daniela Barreiro Claro 11
Junções são operações custosas e muito comuns Dada a junção Reserva<> R.id_marin=M.id_marin Marinheiro Considere um índice em M.id_marin Varre Reserva e para cada tupla usar o índice para examinar em Marinheiros as tuplas que satisfaçam as condiçoes Considere que NÃO há um índice em M.id_marin Neste caso pode-se ordenar ambas as tabelas sob a coluna de junção e então varre-las para encontrar as correspondencias Isso é chamado de junção sort-merge Prof. Daniela Barreiro Claro 12
Junçao Muitas vezes o custo de junçao SORT-MERGE Nao requer um índice pré-existente Por que usar os índices nos loops aninhados? É incremental Ou seja, se uma seleção adicional permitir considerar apenar um subconjunto de Reserva, pode-se evitar calcular a junçao completamente Considere que somente o barco=101 em Reserva e que há poucas reservas para este barco Para cada tupla de Reserva examina Marinheiro e FIM. Se usar sort-merge tem que varrer toda a tabela de Marinheiro Prof. Daniela Barreiro Claro 13
É responsavel pela identificação de um plano eficiente de execução O otimizador gera planos alternativos e escolhe o plano de menor custo. Tarefas do otimizador Enumerar planos alternativos para avaliação da expressão algebrica Um subconjunto pois o numero de planos possiveis é muito grande Avaliar o custo de cada plano enumerado, escolhendo o plano com o custo estimado mais baixo. Prof. Daniela Barreiro Claro 14
Métodos de Busca sem índice Busca Linear Varre todos os registros e testa para ver se satisfazem a condição de seleção. Lento, mas se aplica a qualquer arquivo Busca binária Se o arquivo for ordenado e a condição de seleção for uma comparação de igualdade Prof. Daniela Barreiro Claro 15
Métodos de Busca com índice Índice primário para igualdade Se houver uma comparação de igualdade sobre um atributo-chave com índice primário, utiliza-se o índice para apanhar um único registro cpf = 859 (candidato) Índice primário para não igualdade Se a condição envolver >,<, usa o índice para encontrar o registro de igualdade e depois recupera todos os registros seguintes do arquivo ordenado. cpf > 859 (candidato) Prof. Daniela Barreiro Claro 16
Métodos de Busca com índice Indice primário e igualdade para atributo não chave Se a condição envolver um atributo não chave, use o índice para recuperar os registros. Vários registros podem ser encontrados. Indice é usado para posicionar os registros coddisciplina = mata60 (candidato) Indice secundário com igualdade Com a condição de igualdade, as seleções podem usar um índice secundário Prof. Daniela Barreiro Claro 17
Métodos de Busca para Seleção complexa Seleção conjuntiva utilizando índice individual Verifica se o atributo satisfaz cada uma das condições simples cpf = 859 AND cidade = Salvador (candidato) Seleção conjuntiva utilizando índice composto Se existir um índice composto este índice será usado Uma condição disjuntiva OR é muito mais difícil de se processar É a união dos registros que satisfazem as condições individuais. Prof. Daniela Barreiro Claro 18
É uma das que mais consome tempo no processamento da consulta Junção: R A=B S Método de Junção de Laços Aninhados (nested loop) Para cada registro r em R(laço externo) recupere cada registro s de S(laço interno) e teste se os dois satisfazem a condição de junção r[a]=s[b] Este algoritmo não usa índices É mais eficiente usar a relação com menos tuplas como externa Prof. Daniela Barreiro Claro 19
Método de Junção Sort-Merge (ordenaçãofusão) Se ambos os registros em R e S forem classificados (ordenados) fisicamente pelos valores de A e B, esta junção é muito mais eficiente. Estes arquivos são unidos simultaneamente Método de Junção Hash Os registros são particionados utilizando a mesma função hash. Se as tuplas r e s satisfazem a condição de junção, elas terão o mesmo valor para os atributos de junção. Prof. Daniela Barreiro Claro 20
Há duas técnicas principais para a implementação da otimização das consultas Baseada em regras heurísticas Estimativa do custo Geralmente, estas técnicas são combinadas em um otimizador de consulta. Prof. Daniela Barreiro Claro 21
Regras heurísticas são utilizadas para transformar um árvore de consulta em uma árvore equivalente Normalmente a nova árvore é mais eficiente. Há várias regras de equivalência para transformar estas consultas, dentre elas: 1. Operações de Seleção Conjuntiva podem ser decompostas c1 and c2 and c3 (R) c1 ( c2 ( c3 (R))) 2. Comutatividade das Operações de Seleção c1 ( c2 (R)) c2 ( c1 (R)) Prof. Daniela Barreiro Claro 22
3. Comutatividade de Join e Natural Join R S S R e R S S R 4. Comutatividade da Seleção e Join: Se todos os atributos da condição c forem atributos de apenas uma relação R c (R S) ( c (R)) S São regras de equivalência que podem ser utilizadas para criar planos equivalentes Prof. Daniela Barreiro Claro 23
Uma das principais técnicas heurísticas é Operações SELECT e PROJECT antes de aplicar o JOIN As operações SELECT e PROJECT reduzem o tamanho de um arquivo Suponha a seguinte consulta: nome_cliente ( cidadeagencia= Brooklyn (agencia conta depositante) Sabendo que só existem 4 agências no Brooklyn nome_cliente ( cidadeagencia= Brooklyn (agencia)) (conta depositante) Prof. Daniela Barreiro Claro 24 Q
Um otimizador deve estimar e comparar os custos da execução de uma consulta As heurísticas são utilizadas para reduzir os custos da otimização Mesmo com o uso de heurísticas, a otimização da consulta baseada em custo impõe uma sobrecarga substancial ao processamento da consulta Prof. Daniela Barreiro Claro 25
Informações do catálogo O tamanho de cada arquivo Número de registros Tamanho médio dos registros Número de valores distintos e a seletividade Otimização baseada em custo considera a ORDEM DAS JUNÇÕES Suponha r1 r2 r3 Existem 12 ordens de junções diferentes para r1, r2 e r3 (r1 r2 r3) r1 (r2 r3) (r1 r2) r3... Acrescente mais r4 r5 Prof. Daniela Barreiro Claro 26
Realize operações de seleção o mais cedo possível Com cautela; há casos que pode ser pior o desempenho ɵ (r s), onde a condição ɵ refere-se apenas a atributos em s. Se r for extremamente pequeno em comparação com s Se houver índices sobre atributos de s mas nenhum índice sobre atributos usados em ɵ, neste caso seria uma má idéia usar a seleção mais cedo, ou seja, diretamente sobre s Prof. Daniela Barreiro Claro 27
Realize operações de projeção mais cedo Normalmente é melhor realizar seleção antes projeção Sempre verificar com cautela Prof. Daniela Barreiro Claro 28
Oracle Trabalha com as duas técnicas: regras heurísticas e estimativa de custos Desenvolvedor pode dar dicas ao otimizador Sugere atualizar as estatísticas, mudanças na estrutura, criação de índices Indices de mapa de bits PostgreSQL Otimizador a maior parte baseado em custos Diversos tipos de indices, dentre os quais arvores R Quando um numero de tabelas em um bloco for muito grande, o algoritmo dinamico do System R é muito dispendioso PostgreSQL utiliza os algoritmos genéticos neste caso Casos bem sucedidos com cerca de 45 tabelas Prof. Daniela Barreiro Claro 29